使用Chrome扩展程序替换jQuery脚本

时间:2017-03-23 10:20:01

标签: javascript jquery google-chrome-extension

网站正在运行jQuery脚本。我想使用Chrome扩展程序让网站运行我自己的jQuery脚本版本,而不是正常版本。

到目前为止,我已设法让Chrome扩展程序找到网站称为普通脚本的位置,并且我已将其替换为我自己的:

document.querySelector("script[src^='website.com/originaljqueryscript']").src = 'myjqueryscript';

作为测试,我使myjqueryscript与原始版本完全相同。我将清单中的run_at设置为在document_end上运行。

当我尝试在启用脚本的情况下打开网站时,控制台记录了错误$(...).dialog is not a function。我认为这是因为我的chrome扩展中没有加载jQuery。然后我找到了该网站使用的jQuery版本,并将其添加到我的chrome扩展程序中。现在我收到此错误:$(…).dialog is not a function我认为错误是由于已加载的两个jQuerys之间的冲突(一个在网站上,一个来自我的扩展名)。

我是在正确的轨道上,还是有更好的方法来替换我自己的网站jQuery脚本?

1 个答案:

答案 0 :(得分:1)

如果这是针对一个非常具体的网站,从特定的URL加载jQuery,您可以使用webRequest API拦截对jQuery的请求,并将其重定向到您的扩展中捆绑的文件。 E.g:

chrome.webRequest.onBeforeRequest.addListener(
  function(details) { return {redirectUrl: chrome.runtime.getUrl("js/myjquery.js")}; },
  {urls: ["https://example.com/js/jquery.js"]},
  ["blocking"]
);

(注意:此示例非常小;您可能需要包含并检查请求标头以确保源页面是您的目标网站 - 您真的不想为所有人替换CDN提供的jQuery位点)

这假定网站不使用Subresource Integrity支票,但我相信它会绕过script-src内容安全政策(重定向是透明的)。

请注意.dialog()是jQuery UI的一部分,而不是核心jQuery;该网站可能会加载两者,您需要拦截两者。该网站实际上可能将它们捆绑在一起。