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

Hide all elements before loading chrome extension

本文关键字:隐藏所 元素 加载 chrome 扩展      更新时间:2023-09-26

所以,我正在尝试做一些像家长控制。当我第一次开始我的扩展它工作得很好,但当我再次使用它的元素不隐藏,整个页面加载,然后它重定向,我想隐藏页面上的所有元素,然后重定向,我不使用onBeforeRequest我想用谷歌搜索也使用它,我不知道如果我可以把正则表达式内url选项。我的清单是好的,我在"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";
        }
    });
}

这是一个错误的方法,但首先是它失败的原因。

如果在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重定向它。