我想替换innerHTML()调用在Firefox覆盖插件
I want to replace innerHTML() call in a Firefox overlay addon
我正在为Firefox维护一个覆盖插件。为了通过Mozilla的Add-on验证过程,我必须替换操作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
在行间添加日志消息显示新cell
和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]]
你知道我在这里做错了什么吗?
cell-0: [object CPOW [object HTMLTableCellElement]]
CPOW是一个跨进程对象包装器,这意味着它来自子进程,或者至少来自消息传递API。你没有以安全的方式访问DOM。
更重要的是,您正在创建一个XUL元素(特定于mozilla的XML名称空间)并试图将其插入HTML文档中。这意味着您正在跨文档边界操作(CPOW已经暗示了这一点)。本地作用域中的div-0: [object XULElement]
document
对象不是tbl
的ownerDocument。
因此,即使跨进程问题不存在,您仍然会错误地使用DOM。
如果您想与内容文档的DOM交互,您应该使用消息管理器和框架脚本。它们是支持插件SDK和web扩展内容脚本的低级原语。
另外,您可以在安装中设置<em:multiprocessCompatible>true</em:multiprocessCompatible>
标志。它将禁用兼容性shims或在about:config中启用dom.ipc.shims.enabledWarnings
,如果您试图访问任何不安全的API,这将导致更快抛出警告/错误。
相关文章:
- 在循环中分配json值时,值被覆盖
- 为什么这在IE中的工作方式与在Firefox中不同
- XrayWrapper 错误(值是可调用的)在 Firefox 插件中覆盖原型方法时
- 老.在IE和Firefox上覆盖滚动地图
- Firefox扩展覆盖注入一个JavaScript文件
- CSS覆盖菜单在firefox中不工作
- FireFox插件:如何覆盖原生js函数
- 开发一个Firefox/Chrome扩展,覆盖形状的网页
- 一些避免覆盖UI的方法(可能类似于firefox中的附加组件)
- 在Firefox扩展中覆盖/嵌入插件SDK来修改panel.js
- Firefox扩展不能覆盖元素事件
- 使用about:config覆盖Firefox不安全警告
- 覆盖CSS过滤器反转不工作在Mozilla Firefox
- Firefox插件:隐藏
在XUL覆盖 - 覆盖Firefox和Chrome的快捷键
- 在Firefox中使用postMessage,数据对象似乎被覆盖了
- 用代码覆盖右箭头firefox
- 我想替换innerHTML()调用在Firefox覆盖插件
- Firefox扩展:如何从加载覆盖中运行脚本
- 禁用/覆盖边缘滑动手势在Windows 8与firefox/javascript