我想开发一个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代替什么代码?
答案 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答案的范围。
您应该将其转换为WebExtension,而不是尝试重构/重写旧版扩展代码以保持多进程Firefox的功能。 Mozilla has announced [强调我的]:
到2017年底 ,随着Firefox 57的发布,我们将专门转移到WebExtensions,并将停止加载桌面上的其他扩展类型。为帮助确保任何新扩展程序在2017年底之后正常运行,AMO will stop accepting any new extensions用于签署Firefox 53中不属于WebExtensions的内容。在这一年中,我们将扩展可用的API集,向Firefox添加其他浏览器中尚不存在的功能,并在用户面前添加更多WebExtensions。