jQuery,对Tampermonkey没有冲突

jQuery,对Tampermonkey没有冲突,jquery,tampermonkey,Jquery,Tampermonkey,我正在为一个使用旧版本jQuery的站点玩一个Tampermonkey脚本。我想在我的脚本中使用更新的版本。我试过这个: var contentIndex = 0; var script = document.createElement('script'); script.src = 'https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js'; script.type = 'text/javascript'; docume

我正在为一个使用旧版本jQuery的站点玩一个Tampermonkey脚本。我想在我的脚本中使用更新的版本。我试过这个:

var contentIndex = 0;
var script = document.createElement('script');
script.src = 'https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js';
script.type = 'text/javascript';
document.getElementsByTagName('head')[0].appendChild(script);
var jQuery_310 = $.noConflict(true);
但是,
noConflict
运行得很晚(似乎):我正在篡改的站点现在正在与较新的jQuery对话


如何在现有站点上避免此冲突?

在新脚本标记上使用加载处理程序

var jQuery_310; 
script.onload = function() {
  jQuery_310 = $.noConflict(true);
  console.log("$ calls: " + $.fn.jquery + ", jQuery_310 calls: " + jQuery_310.fn.jquery);
  // initialize any code that uses jQuery_310 here
  init_jQuery_310_code(jQuery_310);
}

function init_jQuery_310_code($) {
  console.log("here in init_jQuery_310_code: $ calls: " + $.fn.jquery);     
  // "$" refers to jQuery_310 version here
  // insert code that requires jQuery_310 here, but use "$" instead
}

将以下内容添加到Tampermonkey中:

// @require      https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js
// @grant        none
解决jQuery冲突 主站点使用的
$
将引用新的jQuery(310),这可能会破坏“篡改”站点上的内容。要解决此问题,第一行代码可以是:

window.jQuery310 = $.noConflict(true);

另一个选项:将避免使用
noConflict
行。

为什么不在TamperMonkey标题中使用
@require
参数?例如,
@requirehttp://code.jquery.com/jquery-latest.js
@RoryMcCrossan,出于许多原因,这是最聪明的方法,但是还需要指定一个
@grant
值,而不是
none
,以避免jQuery冲突。(与下面的怪物相比,这使用了两行代码。)请注意,由于额外的沙箱保护,这种
@grant
在大多数情况下都是最佳实践。Re:“有办法同时使用这两行吗?”。是的,其他GM/TM答案中也包含了这一点。对不起,我没有写一个正式的答案,但是(1)你已经找到了适合你的答案,(2)其他答案已经涵盖了所述的一切——但可能不是完全相同的答案,(3)我现在没有时间也没有兴趣去寻找重复的答案或写一个合适的答案,(4)这是一个X-Y问题,Q中没有说明要求(见您的评论);那些总是需要迭代来满足OP,甚至触及真正的需求(参见接受的答案和OP的答案)。完美。就我自己的记录而言,这实际上就在
appendChild
行的正下方。工作正常。在定义
脚本后,可以在任何地方运行。设置属性的顺序不重要。请原谅我的无知,但是关于范围:我怎样才能在别处访问
jQuery\u310
?如果我把
var jQuery\u310
脚本之外。onload
。。。这似乎没有帮助。Thanks需要将引用
jQuery\u 310
的所有代码包装在一个函数中,并在
onload
callbackThank中调用该函数。令人困惑的是,从
$(window.bind(“LoadHashChange”,thatFunction)调用执行该工作的方法(thatFunction)。。我尝试了一些方法,但是
该函数
永远看不到
jQuery\u 310