javascript - 下面的 Chrome 扩展 javascript 代码片段到底是如何工作的?

标签 javascript google-chrome webrequest

我没有收到 {urls: ["://www.mysite.com/.js"]}, [“阻止”]);部分。此代码可以在@Chrome extension to modify page's script includes and JS找到由于 stackoverflow 规则,将 mysite(dot)com 稍微(强制)修改为 example.com。

chrome.webRequest.onBeforeRequest.addListener(
    function(details) {
        if( details.url == "http://www.example.com/js/library.js" )
            return {redirectUrl: "http://www.example.com/js/library_dev.js" };
    },
    {urls: ["*://www.example.com/*.js"]},
    ["blocking"]);

最佳答案

onBeforeRequest.addEventListener的第二个参数是一个可选的 requestFilter 对象。

它有四个附加属性

  • url(可选字符串数组)
    • 每个元素都是一个 URL 或 URL 模式。请参阅内容脚本匹配模式以了解 URL 模式定义。无法匹配任何 URL 的请求将被过滤掉。
  • 类型(可选的字符串数组)
    • 每个元素都是上述的请求类型。无法匹配任何类型的请求将被过滤掉。
  • tabId(可选整数)
    • 发生请求的选项卡 ID。
  • windowId(可选整数)
    • 发生请求的窗口的 ID。

所以urls: ["*://www.example.com/*.js"]}正在向 onBeforeRequest 监听器添加 URL 过滤器。

这是尝试匹配对 www.example.com 域上的 javascript 文件的任何请求。使用 http 或 https

[(方案) *] :\\[(主机) www.example.com]/[(路径) *.js]

<url-pattern> := <scheme>://<host><path>
<scheme> := '*' | 'http' | 'https' | 'file' | 'ftp'
<host> := '*' | '*.' <any char except '/' and '*'>+
<path> := '/' <any chars>

https://developer.chrome.com/extensions/match_patterns

<小时/>

第三个参数['blocking']是一个可选的字符串数组,用于提供额外信息。这会修改 Chrome 返回回调的方式。

由于包含“阻塞”,所以回调函数是同步处理的。这意味着请求将被阻止,直到回调函数返回。因此,对于 onBeforeRequest,您可以使用它在请求发生之前取消或重定向请求。

此处提供更多信息:

https://www.chromium.org/developers/design-documents/extensions/proposed-changes/apis-under-development/notifications-of-web-request-and-navigation

关于javascript - 下面的 Chrome 扩展 javascript 代码片段到底是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36141929/

相关文章:

javascript - 排序选择选项元素

javascript - 添加 <img> 时,react jsx 中解析错误 : Unexpected token, 预期为 ","

google-chrome - 用于处理 Google 登录的 Google chrome 扩展 list 版本 3

python - 在 Python Beautifulsoup 中使用 itertools 将数据项数据添加到分组中

java - 如何将图片作为多部分 POST 请求的一部分发送 - Java HtmlUnit

google-chrome - 使用 Google Chrome webRequest API 进行简单转发

javascript - 如何中断 localStorage 更改

javascript - 如何在 Vue.js 中使用函数而不是 v-for 来访问数据?

ios - Rails如何在chrome ios上强制下载

php - 语法错误 : Unexpected token ILLEGAL