首页 > 解决方案 > Chrome 扩展程序 | 通过通配符替换网站 JavaScript 文件

问题描述

我能够替换由网页提供的 JavaScript 文件,Chrome 将使用我更改后的脚本。这是解决方案:

清单.json

{
  "name": "extension name",
  "description": "extension descriptin",
  "version": "1.0",
  "manifest_version": 2,
  "background": {"scripts":["background.js"]},
  "permissions": [
    "webRequest",
    "*://examplesite.com/*",
    "webRequestBlocking"
  ]
}

背景.js

chrome.webRequest.onBeforeRequest.addListener(
    function(details) {
        if (details.url == "http://examplesite.com/script.8g5d8wssgf45s.combined.js")
            return {
                redirectUrl: "http://myexamplesite.com/my_modified_script.js"
            };
    }, {
        urls: ["*://examplesite.com/script*.js"]
    },
    ["blocking"]);

这很好用 - 浏览器将忽略脚本script.8g5d8wssgf45s.combined.js,而不是使用我修改后的http://myexamplesite.com/my_modified_script.js. 我不知道如何对脚本进行一些通配符匹配。因为它的名字经常改变——现在是这样,script.8g5d8wssgf45s.combined.js但是当开发者发布一个新版本时,一个脚本名字会有另一个哈希,例如:script.azz561sscbdf.combined.js 是否可以在条件中做一些通配符匹配,像这样?:

if (details.url == "http://examplesite.com/script.*.combined.js")

会有一些通配符标记*,它将接受脚本的所有未来版本更改并替换它?

还有一个问题——我可以在本地提供修改后的脚本版本吗?它将被打包在我的扩展中。或者唯一的方法是通过我的页面提供它,就像在这种情况下:http://myexamplesite.com/my_modified_script.js

感谢您的任何帮助!

标签: javascriptgoogle-chromegoogle-chrome-extension

解决方案


我找到了正则表达式的解决方案,它搜索“脚本。 ”文件名:

chrome.webRequest.onBeforeRequest.addListener(
    function(details) {
        if (details.url.match(/^.*\b(script.)\b.*$/))
            return {
                redirectUrl: "http://myexamplesite.com/my_modified_script.js"
            };
    }, {
        urls: ["*://examplesite.com/*"]
    },
    ["blocking"]);

灵感来自:https ://github.com/bendavis78/chrome-extension-redirector/blob/master/redirector/background.js


推荐阅读