我有一个适用于Firefox的Greasemonkey脚本,昨天它完美地运行了。今天我尝试使用它(未修改任何代码),但发现它已经停止工作了。经过进一步检查,我发现该脚本现在会抛出以下错误:
Error: Permission denied to access property 'handler'
这个错误是在以下代码块中抛出的:
$('body').click(function() {
// code here
});
今天,当这个脚本昨天还能顺利运行的时候,出现了这个神奇的错误。我不明白为什么只是试图在jQuery中添加一个事件处理程序这样基本的操作会导致出现这个错误。我的脚本使用的是jQuery,在页面中已经使用了它,所以我使用了这段代码来让它对GM可访问:
var $ = unsafeWindow.jQuery;
如果需要参考,请查看我在脚本中使用的以下Greasemonkey函数:
// @grant GM_getResourceText
// @grant GM_addStyle
// @grant GM_xmlhttpRequest
// @grant GM_getResourceURL
我已经尝试研究这个错误,但无法找到任何答案。所有看起来可能有帮助的问题都涉及iframes,但我的代码或运行网站中没有一个iframe。我还尝试删除并重新安装脚本,但问题仍未解决。
cloneInto
,exportFunction
,createObjectIn
cloneInto
: 该函数可将一个对象复制到指定的沙盒或内容窗口中,以防止对原始对象的更改。该函数需要两个参数,第一个参数是要复制的对象,第二个参数是要复制到的目标上下文。exportFunction
: 该函数可使一个函数从一个沙盒或内容脚本暴露给另一个沙盒或内容脚本。该函数需要两个参数,第一个参数是要暴露的函数,第二个参数是要将该函数暴露给的目标沙盒或内容脚本。createObjectIn
: 该函数可在指定的沙盒或内容窗口中创建一个新的 JavaScript 对象。该函数需要一个参数,即要在其中创建对象的目标沙盒或内容窗口。 - Oriolfoo = {bar: function(){..}
):unsafeWindow.foo = cloneInto({}, unsafeWindow); unsafeWindow.foo["bar"] = exportFunction(function() {}, unsafeWindow.foo);
- Janaka Bandara