如何在Firefox扩展上使用具有multiprocessCompatible的content.document

时间:2016-11-29 07:58:07

标签: javascript firefox firefox-addon

我想开发一个Firefox Extention,我希望通过以下代码获取此扩展名的当前网页标记:

var bodyTag = content.document.getElementsByTagName("body");

但如果我设置

<em:multiprocessCompatible>false</em:multiprocessCompatible>
<\ n>在install.rdf中,此扩展程序运行良好。但是在其他版本的Firefox中不支持此功能。 当我设置

 <em:multiprocessCompatible>true</em:multiprocessCompatible>
<\ n>在install.rdf中,它根本不起作用。

那么,我该怎么做或者我应该用JavaScript中的content.document代替什么代码?

1 个答案:

答案 0 :(得分:0)

简短的回答是“你不能”。

Multiprocess Firefox将chrome代码和内容分隔为单独的进程。要与<em:multiprocessCompatible>true</em:multiprocessCompatible>一起使用,要求您不要执行您所描述的内容(尝试从Chrome代码访问页面内容)。设置该选项会明确地关闭compatibility shims,从而可以以有限的方式在多进程Firefox上使用该方法访问页面内容。

您需要adapt to using a content script/worker才能访问网页内容。然后,您将使用Message Manager从内容脚本/页面脚本/框架脚本传递消息。如果没有来自您的更多信息(并向我们展示更多代码),那么解释所有可能的方式来访问页面内容将远远超出Stack Overflow答案的范围。

立即开始使用WebExtensions

您应该将其转换为WebExtension,而不是尝试重构/重写旧版扩展代码以保持多进程Firefox的功能。 Mozilla has announced [强调我的]:

  

到2017年底 ,随着Firefox 57的发布,我们将专门转移到WebExtensions,并将停止加载桌面上的其他扩展类型。为帮助确保任何新扩展程序在2017年底之后正常运行,AMO will stop accepting any new extensions用于签署Firefox 53中不属于WebExtensions的内容。在这一年中,我们将扩展可用的API集,向Firefox添加其他浏览器中尚不存在的功能,并在用户面前添加更多WebExtensions。