Javascript 在新版本的Firefox中,是否仍然可以覆盖网页';什么是JS函数?

Javascript 在新版本的Firefox中,是否仍然可以覆盖网页';什么是JS函数?,javascript,firefox,firefox-addon,firefox-addon-sdk,Javascript,Firefox,Firefox Addon,Firefox Addon Sdk,我正在编写一个扩展来覆盖网页的JS函数,从开始,但答案似乎在Linux上的Firefox42中不起作用 接下来,我尝试使用中描述的exportFunction,但也失败了 在package.json中,我添加了以下部分 "permissions": { "unsafe-content-script": true } 这是我的index.js文件 var self = require('sdk/self'); require("sdk/tabs").on("ready", f

我正在编写一个扩展来覆盖网页的JS函数,从开始,但答案似乎在Linux上的Firefox42中不起作用

接下来,我尝试使用中描述的
exportFunction
,但也失败了

package.json
中,我添加了以下部分

  "permissions": {
      "unsafe-content-script": true
  }
这是我的
index.js
文件

var self = require('sdk/self');
require("sdk/tabs").on("ready", fixGoogle);

function fixGoogle(tab) {
    if (tab.url.indexOf("google.com") > -1) {
        tab.attach({
            contentScriptFile: self.data.url("google-script.js")
        });
    } 
}
这是我当前的
数据/googlescript.js

unsafeWindow.rwt=function(){};
setTimeout(function() {
    unsafeWindow.rwt=function(){};
}, 1000);
请注意,手动键入
rwt=function(){}达到了预期的效果,但每次使用谷歌时,我都会自动编写插件来实现这一点


是否可以使用Firefox扩展覆盖
rwt
页面功能?如果是,正确的API是什么?

阅读您链接到的文档,特别是标题为-哪些链接到的章节


事实证明,问题在于,rwt功能的重新定义与原来的定义背道而驰,最终获胜。最初的函数是在我定义的函数之后运行并重写的,因此使它看起来像是我的重新定义失败了

一旦我意识到这就是问题所在,最简单的破解方法就是在
data/googlescript.js
中为重新定义添加一个超时

unsafeWindow.rwt=function(){};
setTimeout(function() {
    unsafeWindow.rwt=function(){};
}, 1000);

因此,仍然正确,但无法解决争用条件。

即使内容脚本共享DOM,它们也与页面脚本隔离。正如您正确猜测的那样,可以在Firefox中使用
unsafeWindow
来绕过这种隔离

就我个人而言,出于某种原因,我不喜欢
unsafeWindow
的名称;)

因此,我提出了另一种方法:利用这些作用域之间共享的东西,即。E多姆

您可以从内容脚本创建页面脚本:

var script = 'rwt=function()();';
document.addEventListener('DOMContentLoaded', function() {
    var scriptEl = document.createElement('script');
    scriptEl.textContent = script;
    document.head.appendChild(scriptEl);
});

这种方法的好处是,您可以在没有
unsafeWindow
的环境中使用它。Gchrome扩展

我尝试使用另一个名为rwt的函数,但失败了。回到计算机后,我将使用其他名称重试。我可能会误导您,我没有尝试
exportFunction
覆盖网页中的现有函数。另一个区别是,我在通过pageMod(
require('sdk/page mod')
)加载的代码中使用了上面的代码。你能用一个小的greasemonkey用户脚本添加一个普通的外部脚本吗?这不起作用。那是我第一次尝试的。无声的失败。