请问浏览器插件chrome.webRequest.onCompleted.addListener 能监听带#号的请求吗,我在background.js中用urls: ["://xxx.xxxx.com/xxxxxx/#/userStatus/"],但是请求带了#,导致写到#后面的请求监听不成功,我这么做是想监听iframe被打开时操作,或者是有没有类似的可以监听iframe打开的方法,比如点击按钮打开了iframe标签(iframe是可以关闭的),每次打开都重新执行,类似于监听标签打开的操作:chrome.tabs.onUpdated.addListener
chrome.webRequest.onCompleted.addListener(
function (details) {
******
},
{ urls: ["*://xxx.xxxx.com/xxxxxx/#/userStatus/*"] }
);
可以
监听请求:
chrome.webRequest.onBeforeRequest.addListener(
function(details) {
// 在这里处理请求
console.log('请求 URL:', details.url);
},
{urls: ["<all_urls>"]}
);
监听iframe打开:
chrome.webNavigation.onCreatedNavigationTarget.addListener(
function(details) {
// 在这里处理iframe打开事件
console.log('打开的URL:', details.url);
},
{url: [{schemes: ['http', 'https']}]},
);
另:需要 manifest.json 中声明相应的权限
{
"manifest_version": 2,
"name": "My Extension",
"version": "1.0",
"permissions": [
"webRequest",
"webRequestBlocking",
"<all_urls>"
],
"background": {
"scripts": ["background.js"],
"persistent": false
},
"manifest_version": 2
}
问题解决思路:
判断URL是否包含#号,如果包含则进行相应的操作。
监听iframe的打开事件:
具体解决方案如下:
chrome.webRequest.onCompleted.addListener(
function(details) {
// 获取当前活动的tab
chrome.tabs.query({ active: true, currentWindow: true }, function(tabs) {
// 获取当前页面的URL
var url = tabs[0].url;
// 判断URL是否包含#号
if (url.includes("#")) {
// 进行相应的操作
// ...
}
});
},
{ urls: ["<all_urls>"] }
);
chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
// 判断标签页的状态是否为complete
if (changeInfo.status === "complete") {
// 向标签页注入内容脚本
chrome.tabs.executeScript(tabId, { file: "content.js" });
}
});
其中,content.js为内容脚本的文件名,可以根据实际需求进行修改。在content.js中可以进行相应的操作。
请注意,以上解决方案仅供参考,具体的实现方式可能因插件的具体需求而有所不同。