Greasemonkey Jquery干扰?
可能重复:
Greasemonkey 1.0中的jQuery与使用jQuery的网站冲突
看来如果我的任何一个greasemonkey脚本都有如下所示的行,我会在包含jquery的网站上出错。 我不确定为什么,但我注意到一些javascript事件完全没有解雇。 (例如关于SO我不能添加评论)。
我可以在脚本中排除SO,但是有更好的解决方案吗? 如果jquery存在,也许我应该在测试后动态添加jquery。 如何解决此问题以及如何在不使用jquery的情况下将jquery脚本标记添加到正文?
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js
Greasemonkey 1.0彻底改变了沙盒的工作方式 ,破坏了成千上万的脚本。 另请参阅, Greasemonkey 1.0中的jQuery与使用jQuery的网站冲突 。
这是一个巨大的问题,Greasemonkey的首席开发人员表达了完全不愿以合理的方式解决它。
要解决此问题,请将沙箱恢复到您的脚本,并通过编辑元数据块以结束以下行来解决$
冲突:
// @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 ,它在过去提供了卓越的function和性能,并且不会受到这种新沙箱行为的影响。
到目前为止, Scriptish还没有发布破坏其大部分安装基础的更新。
只有在尚未包含jQuery时才需要包含jQuery。 所以你需要进行第一行检查。 如果包含它,则运行脚本(如果未包含)添加类似行以包含它然后循环检查function。 像这样的东西:
var wrote = false, runScript = function(){ if(typeof(jQuery) === 'undefined'){ if(!wrote){ wrote = true; document.write(''); } setTimeout(runScript, 50); }else{ //your script goes here } }; runScript();
唯一的问题是如果google的jquery没有启动。