Javascript 在新版本的Firefox中,是否仍然可以覆盖网页';什么是JS函数?
我正在编写一个扩展来覆盖网页的JS函数,从开始,但答案似乎在Linux上的Firefox42中不起作用 接下来,我尝试使用中描述的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
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(){}使用bookmarklet(需要点击)时,浏览器控制台上的code>达到了预期的效果,但每次使用谷歌时,我都会自动编写插件来实现这一点
是否可以使用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用户脚本添加一个普通的外部脚本吗?这不起作用。那是我第一次尝试的。无声的失败。