在我的扩展程序中,我正在尝试识别作为特定页面的一部分加载的请求。例如,如果页面:
https://www.arandomwebsite.com
加载以下资源:
https://www.arandomwebsite.com/js/app.js
https://www.arandomwebsite.com/css/style.css
并发出一些API请求:
https://www.arandomwebsite.com/api/users
使用chrome.webRequest.onBeforeRequest,我想知道www.arandomwebsite.com/js/app.js
是从www.arandomwebsite.com
加载的chrome.tabs
。
我尝试使用chrome.tabs
来获取标签网址。由于onUpdated
是异步的,我使用onRemoved
和chrome.webRequest.onBeforeRequest
来跟踪标签更改。但是,由于chrome.tabs.onUpdated
可以在var allowedURL = "https://www.arandomwebsite.com/"
var tabs = {};
chrome.tabs.query({}, function(tabs) {
tabs.forEach(function(tab) {
tabs[tab.id] = tab;
});
});
chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
tabs[tab.id] = tab;
});
chrome.tabs.onRemoved.addListener(function(tabId) {
delete tabs[tabId];
});
chrome.webRequest.onBeforeRequest.addListener(function (details) {
return checkURL(details);
}, {
urls: ['<all_urls>']
}, ['blocking']);
function checkURL(details) {
if(details.type === 'main_type') {
if(details.url === allowedURL) {
// Allow the request
return {
cancel: false
}
}
else {
// Block the request
return {
cancel: true
}
}
}
else {
if(tabs[details.tabId].url === allowedURL) {
// Allow the request
return {
cancel: false
}
}
else {
// Block the request
return {
cancel: true
}
}
}
}
之前触发,但这不起作用。
text/plain
有更好的方法吗?