Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在PageMod(Firefox加载项SDK)的HEAD标记顶部插入脚本_Javascript_Firefox_Firefox Addon_Firefox Addon Sdk - Fatal编程技术网

Javascript 在PageMod(Firefox加载项SDK)的HEAD标记顶部插入脚本

Javascript 在PageMod(Firefox加载项SDK)的HEAD标记顶部插入脚本,javascript,firefox,firefox-addon,firefox-addon-sdk,Javascript,Firefox,Firefox Addon,Firefox Addon Sdk,我想在通过添加的Firefox附加SDK内容脚本中插入一个脚本。所以,当用户转到页面XXX时,他会得到一个带有插入脚本的页面。但是,当我尝试在头部顶部插入这个时,我得到了一个错误,第一个节点子节点不是一个对象 插入的内容脚本代码为: script='<script>var d=new Date(2012,2,24); window.Date=function () {return d;}</script>'; var head = document.getElement

我想在通过添加的Firefox附加SDK内容脚本中插入一个脚本。所以,当用户转到页面XXX时,他会得到一个带有插入脚本的页面。但是,当我尝试在头部顶部插入这个时,我得到了一个错误,第一个节点子节点不是一个对象

插入
的内容脚本代码为:

script='<script>var d=new Date(2012,2,24); window.Date=function () {return d;}</script>';

var head = document.getElementsByTagName("head")[0];
head.insertBefore(script, head.firstChild);
script='var d=新日期(2012,2,24);Date=函数(){return d;}';
var head=document.getElementsByTagName(“head”)[0];
head.insertBefore(脚本,head.firstChild);
这是怎么回事?

您还没有提供一个。因此,此答案仅基于您提供的代码

如何使用的问题: 我注意到的第一个问题是,当参数需要是一个字符串时,您将提供一个字符串作为第一个参数

但是,您声明得到的错误是“第一个节点子节点不是对象”。这与基于所提供代码的错误的预期不符。当我将您的代码放入内容脚本时,我得到的错误是:

console.error:testpagemodinsertBefore:
对象
-\u errorType=TypeError
-message=Node.insertBefore的参数1不是对象。
-文件名=resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/modules/commonjs/sdk/loader/sandbox.js -> resource://testpagemodinsertbefore/data/contentScript.js
-行号=26
-堆栈=@resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/modules/commonjs/sdk/loader/sandbox.js -> resource://testpagemodinsertbefore/data/contentScript.js:26:1|
-name=TypeError
这是我在问题代码中所期望的错误。因此,您要么没有发布产生所述错误的代码,要么错误地报告了在控制台中看到的错误。今后,请准确地报道你的报道。说得更详细总比把事情漏掉好

插入HTML文本: 您的代码:

script='<script>var d=new Date(2012,2,24); window.Date=function () {return d;}</script>';
这适用于大多数HTML。但是,不会导致执行/评估
标记的内容。这是。攻击者将任意文本插入DOM比插入实际节点/元素容易得多。HTML规范指定将标记作为文本插入

插入评估和执行的
标记:
我们可以通过创建一个包含所需脚本文本的
元素,然后将该元素插入DOM来实现这一点

对于您的代码,它看起来像:

//获取第一个元素
让head=document.getElementsByTagName(“head”)[0];
//所需的脚本文本
让scriptText='var d=新日期(2012,2,24);window.Date=函数(){return d;};';
//添加用于测试的警报(\n不是必需的。但是,在检查DOM时可读性更强。)
scriptText='window.alert(“在插入的脚本中”)\n'+脚本文本;
//创建一个元素
让scriptEl=document.createElement('script');
//这就是JavaScript
scriptEl.type='text/javascript';
//添加脚本文本
scriptEl.textContent=scriptText;
//将其作为的第一个子项插入
head.insertBefore(scriptEl,head.firstChild)您尚未提供。因此,此答案仅基于您提供的代码

如何使用的问题: 我注意到的第一个问题是,当参数需要是一个字符串时,您将提供一个字符串作为第一个参数

但是,您声明得到的错误是“第一个节点子节点不是对象”。这与基于所提供代码的错误的预期不符。当我将您的代码放入内容脚本时,我得到的错误是:

console.error:testpagemodinsertBefore:
对象
-\u errorType=TypeError
-message=Node.insertBefore的参数1不是对象。
-文件名=resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/modules/commonjs/sdk/loader/sandbox.js -> resource://testpagemodinsertbefore/data/contentScript.js
-行号=26
-堆栈=@resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/modules/commonjs/sdk/loader/sandbox.js -> resource://testpagemodinsertbefore/data/contentScript.js:26:1|
-name=TypeError
这是我在问题代码中所期望的错误。因此,您要么没有发布产生所述错误的代码,要么错误地报告了在控制台中看到的错误。今后,请准确地报道你的报道。说得更详细总比把事情漏掉好

插入HTML文本: 您的代码:

script='<script>var d=new Date(2012,2,24); window.Date=function () {return d;}</script>';
这适用于大多数HTML。但是,不会导致执行/评估
标记的内容。这是。攻击者将任意文本插入DOM比插入实际节点/元素容易得多。HTML规范指定将标记作为文本插入

插入评估和执行的
标记:
我们可以通过创建一个包含所需脚本文本的
元素,然后将该元素插入DOM来实现这一点

对于您的代码,它看起来像:

//获取第一个元素
让head=document.getElementsByTagName(“head”)[0];
//所需的脚本文本
让scriptText='var d=新日期(2012,2,24);window.Date=函数(){return d;};';
//添加用于测试的警报(\n不是必需的。但是,在检查DOM时可读性更强。)
scriptText='window.alert(“在插入的脚本中”)\n'+脚本文本;
//创建一个元素
让scriptEl=document.createElement('script');
//这就是JavaScript
scriptEl.type='text/javascript';
//添加脚本文本
scriptEl.textContent=scriptText;
//将其作为第一个插入