【发布时间】:2019-02-20 15:55:14
【问题描述】:
我正在使用 WebExtensions 开发扩展,但遇到了 WebRequest 事件的问题。我试图截获对 Facebook.com 新闻源发送以加载更多帖子的请求的响应,该请求通过 URL https://www.facebook.com/ajax/pagelet/generic.php/LitestandTailLoadPagelet?dpr=* 发生(其中* 是一大堆标识符)。此请求显示在 devtools 中:
image.
以下是相关的清单位:
{
"permissions": [
"*://facebook.com/*",
"tabs",
"activeTab",
"webRequest",
"webRequestBlocking"
],
"background": {
"scripts": [
"background.js"
]
},
"content_scripts": [{
"matches": ["*://facebook.com/", "*://facebook.com/groups/?*"],
"js": ["/content-script.js"],
"css": ["/css/styles.css"]
}]
}
在 background.js 中,我在文件的最顶部有以下事件侦听器(此处的顺序不重要):
browser.webRequest.onHeadersReceived.addListener(
details => { console.log("event"); },
{ urls: ["https://www.facebook.com/ajax/pagelet/generic.php/LitestandTailLoadPagelet?dpr=*"] },
["blocking", "responseHeaders"]
);
但是,发出请求(甚至使用相同的 url 重新发送上图中的请求)不会触发 console.log,甚至不会触发通过 devtools 在事件上设置的断点。页面加载没有问题。
有什么想法吗?
【问题讨论】:
-
所有关于“匹配模式”的文档都提到了方案、主机和路径——没有任何迹象表明您可以匹配 URL 的“搜索”部分(?之后的部分)......当然,没有任何建议你也不能,所以到目前为止我的评论毫无用处:p - 作为测试,删除网址中的
?dpr=*只是为了看看它是否被触发 -
好主意,但匹配模式适用于任何文本和包含 * 的通配符。反正我试过了,结果一样——不匹配。
标签: javascript firefox webrequest firefox-addon-webextensions