我有一个 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
我尝试研究这个错误,但找不到任何答案。所有看起来可能有帮助的问题都涉及 iframe,但在我的代码或其运行的网站中找不到任何 iframe。我还尝试删除并重新安装脚本,但这并没有解决问题。
Greasemonkey 2.0 刚刚推送到所有设置为自动更新的 Firefox 浏览器。 (GM 2 于 2014 年 6 月 17 日发布,但可能需要几周时间才能完成审核过程。)
Greasemonkey 2.0 彻底改变unsafeWindow处理 http://www.greasespot.net/2014/06/greasemonkey-20-release.html:
向后不兼容变化:
- 为了稳定性、可靠性和安全性,特权沙箱已更新,以匹配附加 SDK 的 unsafeWindow 的新更改。为了将值写入 unsafeWindow,您将需要使用新方法 cloneInto() https://developer.mozilla.org/en-US/docs/Components.utils.cloneInto, exportFunction() https://developer.mozilla.org/en-US/docs/Components.utils.exportFunction,和/或createObjectIn() https://developer.mozilla.org/en-US/docs/Components.utils.createObjectIn.
- The
@grant none
模式现在是默认的,并且在未明确提供时将不再暗示授予。看帖子Greasemonkey 2.0 中沙盒 API 的更改 http://www.greasespot.net/2014/06/sandbox-api-changes-in-greasemonkey-20.html了解更多详情。
通常,要现场访问页面函数或变量,您可以切换到新方法,但是在您的情况下,您正在使用var $ = unsafeWindow.jQuery;
——这始终是一种不好的做法。
jQuery 是一个特例 https://stackoverflow.com/q/12146445/331508来回克隆它会破坏一切。
@require
改为 jQuery,EG:
// ==UserScript==
// @name _YOUR_SCRIPT_NAME
// @include http://YOUR_SERVER.COM/YOUR_PATH/*
// @require http://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js
// @grant GM_getResourceText
// @grant GM_addStyle
// @grant GM_xmlhttpRequest
// @grant GM_getResourceURL
// ==/UserScript==
...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)