作为一项学习练习,我尝试构建一个示例Chrome扩展程序,以确保“灰名单”上的网站。始终在隐身窗口中打开。
这里有多远 - 使用webNavigation.onBeforeNavigate事件,当灰色列出的页面即将导航到我在隐身窗口中打开一个新标签时,但现在需要阻止原始标签从打开页面。
manifest.js:
"permissions": [
"webNavigation",
"tabs"
],
"background": {
"scripts": [
"background.js"
],
"persistent": false
},
background.js:
chrome.webNavigation.onBeforeNavigate.addListener(function(details) {
chrome.tabs.get(details.tabId, function(tab) {
if(!tab.incognito) {
// Open the page in an incognito window
chrome.windows.create({ url: details.url, incognito: true});
// TODO stop non-incognito tab opening page!
}
});
}, {
url: [
{ hostEquals: 'badsite.com' }
],
});
答案 0 :(得分:0)
要通过在选项卡中注入内容脚本来停止导航,请使用window.stop()
:
chrome.tabs.executeScript(details.tabId, {code: 'window.stop()'});
在manifest.json中添加权限,否则您会在background page console中看到错误:
"permissions": [
"webNavigation",
"tabs",
"<all_urls>"
],
答案 1 :(得分:0)
部分答案来自wOxxOm的输入和进一步的实验和阅读 - 至少记录我发现的内容。
manifest.js:
"permissions": [
"webNavigation",
"tabs",
"<all_urls>" // Note: Permission
],
...
background.js:
// Note: onCommitted
chrome.webNavigation.onCommitted.addListener(function(details) {
chrome.tabs.get(details.tabId, function(tab) {
if(!tab.incognito) {
// Stop non-incognito tab opening page
// Note runAt: "document_start"
chrome.tabs.executeScript(details.tabId, { runAt: "document_start", code: 'window.stop(); '})
// Open the page in an incognito window
chrome.windows.create({ url: details.url, incognito: true});
}
});
}, {
url: [
{ hostEquals: 'badsite.com' }
],
});
收听chrome.webNavigation.onCommitted
个事件而不是onBeforeNavigate
允许chrome.tabs.executeScript
注入的脚本在从新标签导航到灰色列出的页面并且将网址粘贴到omni时运行框。
这可以防止灰名单页面显示,但页面至少部分加载。未创建历史记录条目,但 Cookie或本地存储项目已创建,因此无法满足原始问题的最终需求。
答案 2 :(得分:0)
两种方式:
chrome.webNavigation.onBeforeNavigate.addListener((details) => {
chrome.tabs.executeScript(tabid,{code: 'window.stop()'});
});
window.history.pushState(“object or string”, “Title”, “/new-url”);