我想在Firefox覆盖地址

时间:2016-08-16 20:04:57

标签: 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.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

在行之间添加日志消息表明新celldiv元素的类型不同:

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]]

我在这里做错了什么想法?

提前致谢。

1 个答案:

答案 0 :(得分:1)

  

cell-0:[object CPOW [object HTMLTableCellElement]]

CPOW是cross process object wrapper,这意味着它来自子进程,或者至少来自传递API的消息。您未以e10s-safe方式访问DOM。

  

div-0:[对象XULElement]

Morecover您正在创建一个XUL元素(特定于Mozilla的XML命名空间)并尝试将其插入HTML文档中。这意味着您可以跨文档边界进行操作(CPOW已经暗示了这一点)。本地范围中的document对象不是tbl的{​​{3}}。

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

如果您想与内容文档的DOM进行交互,则应使用ownerDocument。它们是支持Addon SDK和webextension内容脚本的低级原语。

此外,您可以设置<em:multiprocessCompatible>true</em:multiprocessCompatible> message manager and frame scripts,这将禁用兼容性填充程序或在about:config中启用dom.ipc.shims.enabledWarnings,这会导致警告/错误被提起,如果你&#39;重新尝试访问任何不安全的API。