asd*_*sdf 5 javascript google-chrome google-chrome-extension
我正在尝试制作一个 Chrome 扩展程序,通过将用户重定向到扩展程序的自定义 HTML 阻止页面来阻止用户访问网站。然后,用户可以选择单击“取消阻止”以排除当前选项卡被过滤器检查。
扩展按预期工作。例如,如果您尝试访问https://www.youtube.com/,而“youtube.com”位于阻止列表中,它会将您重定向到“blocked.html”。
但是,该扩展似乎仅适用于您正在使用的当前选项卡。如果您尝试单击指向https://www.youtube.com 的超链接(这会在新选项卡中打开链接) ,它将重定向到“blocked.html”,但 Chrome 会阻止该重定向并给您提供这个屏幕:
即使您现在将焦点放在选项卡上并按刷新,“blocked.html”仍然不会加载。
我相信这可能是因为我的清单文件中缺少权限,但是,我查看了权限页面的文档,但找不到可以添加的任何相关权限。
提前致谢。
注意:有趣的是,上面显示的黄色错误消息仅出现在已被 Chrome 阻止的页面上。消息是这样的:“crbug/1173575,非 JS 模块文件已弃用。”
此外,如果您尝试刷新页面,消息显示的行号会变高。(我刷新了几次,现在是VM712:7146)。不确定此消息是否与错误相关。
清单.json
"manifest_version": 2,
"background": {
"service_worker": "background.js"
},
"options_page": "options.html",
"permissions": [
"storage",
"activeTab",
"tabs",
"webRequest",
"webRequestBlocking",
"<all_urls>"
],
"page_action": {
"default_popup": "popup.html"
}
Run Code Online (Sandbox Code Playgroud)
blocked.js(缩短)
// Unblock button redirect
let unblockButton = document.getElementById("unblockButton");
updateOriginalUrl();
chrome.runtime.onMessage.addListener(function update(message) {
updateOriginalUrl();
chrome.runtime.onMessage.removeListener(update);
})
function updateOriginalUrl() {
chrome.storage.sync.get("originalUrl", (result) => {
console.log("Unblock button URL set to: " + result.originalUrl);
unblockButton.addEventListener("click", () => {
location.href = result.originalUrl;
chrome.runtime.sendMessage("exclude")
})
});
}
Run Code Online (Sandbox Code Playgroud)
背景.js
chrome.webRequest.onBeforeRequest.addListener((details) => {
console.log("New request detected")
console.log("Request URL: " + details.url);
if(enabled && !excludedTabs.includes(details.tabId)) {
for(let blockedUrl of blockedList) {
if(details.url.includes(blockedUrl)) {
console.log("Match detected, redirecting");
chrome.storage.sync.set( {"originalUrl": details.url}, () => {
chrome.runtime.sendMessage("updateOriginalUrl");
});
return {
redirectUrl: chrome.runtime.getURL("blocked.html")
};
}
}
}
}, {
urls: ["<all_urls>"],
types: ["main_frame"]
}, ["blocking"]);
Run Code Online (Sandbox Code Playgroud)
谢谢@wOxxOm:
将blocked.html 添加到manifest.json 中的web_accessible_resources 中,或者切换到使用declarativeNetRequest API。
这有效。
| 归档时间: |
|
| 查看次数: |
1918 次 |
| 最近记录: |