可能重复:
jQuery in Greasemonkey 1.0 conflicts with websites using jQuery
如果我的任何一个greasemonkey脚本都有如下所示的行,那么我在包含jquery的网站上会出现错误。我不确定为什么,但我确实注意到一些javascript事件完全没有解雇。 (例如关于SO我无法添加评论)。
我可以在脚本中排除SO,但有更好的解决方案吗?如果jquery存在,也许我应该在测试后动态添加jquery。如何解决此问题以及如何在不使用jquery的情况下将jquery脚本标记添加到正文中?
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js
答案 0 :(得分:4)
Greasemonkey 1.0, radically changed the way the sandbox works,破坏了数千个脚本。另请参阅jQuery in Greasemonkey 1.0 conflicts with websites using jQuery。
这是一个很大的问题,Greasemonkey的首席开发人员表示完全不愿以合理的方式解决它。
要解决此问题,请将沙箱恢复到您的脚本,并通过修改Metadata Block以结束以下行来解决$
冲突:
// @grant GM_addStyle
// ==/UserScript==
/*- The @grant directive is needed to work around a major design change introduced in GM 1.0,
It restores the sandbox.
*/
指定@grant
值(none
除外)会重新激活沙箱。
您可能还会考虑切换到Scriptish,它在过去提供了卓越的功能和性能,并且不会受到这种新的沙箱行为的影响。
到目前为止,Scriptish 还没有发布破坏其大部分安装基础的更新。
答案 1 :(得分:2)
只有在尚未包含jQuery时才需要包含jQuery。所以你需要进行第一行检查。如果包含它,则运行脚本(如果未包含)添加类似行以包含它然后循环检查功能。像这样:
var wrote = false,
runScript = function(){
if(typeof(jQuery) === 'undefined'){
if(!wrote){
wrote = true;
document.write('<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>');
}
setTimeout(runScript, 50);
}else{
//your script goes here
}
};
runScript();
唯一的问题是,如果google的jquery没有启动。