javascript - 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
?
感谢您的任何帮助!
解决方案
我找到了正则表达式的解决方案,它搜索“脚本。 ”文件名:
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
推荐阅读
- amazon-web-services - 如何从带有 AWS 客户端 VPN 的浏览器连接到 AWS Elastic Search?
- vuejs2 - 来自 Vuex 的 Apollo 请求
- sql - SQL-Case 语句/也许循环会起作用?
- javafx - FXML 中的树视图
- r - 如何将参数传递给 R 管道工的 unboxedJSON 序列化程序?
- javascript - 在 JavaScript 过滤器方法中迭代
- node.js - 对 NestJS 的意见 i18n
- r - 如何使用 lapply 函数进行 Levene 测试
- webhooks - 是否可以通过 Autodesk Webhooks API 获取标记、问题和 RFI 事件(添加、删除、更新)?
- javascript - 无法将 onClick / 事件侦听器添加到 MaterialUI 中的 ListItem