在加载chrome扩展名之前隐藏所有元素

时间:2015-08-23 10:29:19

标签: javascript google-chrome google-chrome-extension

所以,我正在尝试做父母控制之类的事情。当我第一次启动扩展时它工作正常,但是当我再次使用它时,元素不会隐藏,整个页面加载然后重定向,我想隐藏页面上的所有元素然后重定向,我不使用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";
        }
    });
}

1 个答案:

答案 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以获取完整样本。