所以,我正在尝试做父母控制之类的事情。当我第一次启动扩展时它工作正常,但是当我再次使用它时,元素不会隐藏,整个页面加载然后重定向,我想隐藏页面上的所有元素然后重定向,我不使用onBeforeRequest我也想用它与google搜索,我不知道我是否可以把regex放在urls选项中。我的清单没问题,我在“document_start”开始编写内容脚本。
background.js
var activeTabUrl;
var regex = /http:\/\/www.youporn.com\//
chrome.tabs.onUpdated.addListener(function (tabId, changeInfo, tab) {
chrome.tabs.query({
active: true,
currentWindow: true
}, function (arrayOfTabs) {
activeTabUrl = arrayOfTabs[0].url;
});
if (activeTabUrl.match(regex)) {
chrome.tabs.update({
url: "http://google.com/"
})
} else {
chrome.tabs.sendMessage(tabId, {
action: "show_my_page"
}, function (response) {});
}
});
myscript.js(content_script)
_ini();
function _ini() {
document.getElementsByTagName("html")[0].style.display = "none";
chrome.extension.onMessage.addListener(function (msg, sender, sendResponse) {
if (msg.action == 'show_my_page') {
document.getElementsByTagName("html")[0].style.display = "block";
}
});
}
答案 0 :(得分:0)
这是一种错误的方法,但首先是失败的原因。
如果您在document_start
执行,则dom中存在的唯一节点将是document
节点。甚至还没有html
。
是的,您可能会等待html
节点出现,但这是非常迂回的。你的目标是首先防止导航 - 对于阻止风格的功能,有webrequest
API(IIRC,专门为AdBlock实现)。
以下是文档本身的最小样本:
chrome.webRequest.onBeforeRequest.addListener(
function(details) { return {cancel: true}; },
{urls: ["*://www.evil.com/*"]},
["blocking"]);
您还可以在阻止响应中使用redirectUrl
代替cancel
重定向该代码。另请参阅CatBlock以获取完整样本。