Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/397.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 我想替换Firefox覆盖插件中的innerHTML()调用_Javascript_Firefox Addon_Xul - Fatal编程技术网

Javascript 我想替换Firefox覆盖插件中的innerHTML()调用

Javascript 我想替换Firefox覆盖插件中的innerHTML()调用,javascript,firefox-addon,xul,Javascript,Firefox Addon,Xul,我正在为Firefox维护一个覆盖插件。要通过Mozilla的加载项验证过程,我必须替换操纵DOM元素内容的innerHTML()调用 我创建了一个表的新单元格,并希望使用以下方法设置内容: var newCell = tbl.rows[row].insertCell(col); var div = document.createElement('div'); div.appendChild(document.createTextNode(content)); newCell.appendChi

我正在为Firefox维护一个覆盖插件。要通过Mozilla的加载项验证过程,我必须替换操纵DOM元素内容的
innerHTML()
调用

我创建了一个表的新单元格,并希望使用以下方法设置内容:

var newCell = tbl.rows[row].insertCell(col);
var div = document.createElement('div');
div.appendChild(document.createTextNode(content));
newCell.appendChild(div);
错误消息是:

TypeError: Argument 1 of Node.appendChild does not implement interface Node.

EventTargetChild.prototype.handleEvent@resource://gre/modules/RemoteAddonsChild.jsm:461:5

EventTargetChild/this.capturingHandler@resource://gre/modules/RemoteAddonsChild.jsm:431:38
在行之间添加日志消息表明新的
单元格
div
元素的类型不同:

var newCell = tbl.rows[row].insertCell(col);
console.log("cell-0: " + newCell);
var div = document.createElement('div');
console.log("div-0: " + div);
div.appendChild(document.createTextNode(content));
console.log("div-1: " + div);
console.log("cell-1: " + newCell);
newCell.appendChild(div);
console.log("cell-2: " + newCell);
日志消息包括:

cell-0: [object CPOW [object HTMLTableCellElement]]
div-0: [object XULElement]
div-1: [object XULElement]
cell-1: [object CPOW [object HTMLTableCellElement]]
你知道我做错了什么吗

提前谢谢

单元格-0:[对象CPOW[对象HTMLTableCellElement]]

CPOW是一个,这意味着它来自子进程,或者至少来自消息传递API。您没有以某种方式访问DOM

div-0:[对象XuleElement]

您正在创建一个XUL元素(一个特定于mozilla的XML名称空间)并试图将其插入HTML文档中。这意味着您正在跨文档边界进行操作(CPOW已经暗示了这一点)。本地作用域中的
文档
对象不是
tbl
的对象

因此,即使不存在跨进程问题,您仍然会错误地使用DOM


如果希望与内容文档的DOM交互,则应使用。它们是支持插件SDK和webextension内容脚本的底层原语


此外,您还可以设置
true
,该选项将禁用兼容性垫片或在about:config中启用
dom.ipc.shimmes.enablewarnings
,如果您试图访问任何不安全的API,这将导致提前抛出警告/错误

很抱歉,这里没有帮助,但我使用的是FF 48,它可以工作:您使用尝试将节点插入到XUL文档中。它似乎创建了HTML元素而不是XUL元素。我们需要更多关于您插入的
以及之前如何操作的信息。指向加载项WO9U当前版本的链接可能会有所帮助。@blex,这将插入到XUL文档中。使用基于HTML的站点(例如jsfiddle.net)无法准确地对其进行原型化。测试XUL需要文件位于机器本地(XUL浏览器),或者在基于Mozilla的应用程序中使用
chrome://
URI。此外,当您提到“Mozilla的附加验证过程”时,您是在说自动验证吗,或者审查您的加载项的人员在使用
innerHTML
时遇到问题?
innerHTML
的主要问题是安全性,这取决于所添加文本的来源。如果您的文本完全来源于您的加载项,它应该能够通过审查(您可能需要向他们解释您正在做什么)。@Makyen,非常感谢您的建议查看
文档。我不知道我不能只使用
文档
。显然,这与使用我从必须注册插件的事件中返回的
文档不同。我现在基于这个
文档创建的每个元素都是
CPOW对象
,它可以工作。