我正在尝试制作一个 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", …Run Code Online (Sandbox Code Playgroud)