javascript - 如何使用 Chrome 扩展程序在页面加载前隐藏所有内容

标签 javascript google-chrome-extension

我尝试使用内容脚本

list

"content_scripts": [
    {
        "matches": ["*://*/*"],
        "js": ["js/content_script.js"]
    }
]

content_script.js

_ini();
function _ini(){
    document.body.style.display="none";
}

但它先加载页面然后隐藏它。

所以我尝试了webNavigation

chrome.webNavigation.onCommitted.addListener(function(details){
    alert('webnav');
    document.body.style.display="none";
});

但是上面的方法也不起作用。该页面在页面加载之前提醒 webnav 但显示无效果。

我真正需要的是隐藏整个站点而不向客户显示任何元素。有什么想法吗?

最佳答案

现有答案在大多数情况下都是正确的,但我想提供更多有关所用方法含义的上下文。在您准备好之前隐藏页面的推荐方法是:

list .json:

{
    ...
    "content_scripts": [{
        "matches": ["*://*/*"],
        "js": ["contentscript.js"],
        "run_at": "document_start"
    }],
    ...
}

contentscript.js

document.documentElement.style.visibility = 'hidden';
document.addEventListener('DOMContentLoaded', function() {
    // ... do something ... and then show the document:
    document.documentElement.style.visibility = '';
});

visibility:hiddendisplay:none

您应该使用display = 'none',但是visibility = 'hidden'as suggested by Parag Gangli for .首选 visibility:hidden 而不是 display:none 的原因是 visibility 不会影响元素的任何维度属性。当一个元素设置为 display:none 时,该元素及其所有后代节点的宽度和高度都将为 0。这可能会破坏依赖于涉及元素尺寸计算的多个页面在文档树中。

切换 display:none 的另一个结果是滚动位置和 anchor (#id-of-something) 被破坏。浏览器将不再跳转到 anchor 或上一个滚动位置,而是在滚动位置 (0,0) 显示页面。这是非常不受欢迎的。

document.body 对比 ... 对比 document.documentElement

document.body"run_at": "document_start" 时不存在已设置,因此无法使用。 document.getElementsByTagName('html')[0] 有效,但可以更简洁地写成 document.documentElement(= 文档的根)。

window.onloadDOMContentLoaded

window.onload 只会在所有资源(图片、帧等)加载完毕时触发。这可能需要一段时间,因此在触发 window.onload 事件之前隐藏整个页面不是一个好主意。

在大多数情况下,您的扩展仅依赖于文档结构,因此修改文档并在 DOMContentLoaded 事件中显示文档就足够了。

关于javascript - 如何使用 Chrome 扩展程序在页面加载前隐藏所有内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24626809/

相关文章:

javascript - CSS 如何设置自定义复选框勾号的 "content"/"background"属性的样式?

javascript - 如何将悬停菜单更改为可点击菜单

javascript - 如何在angularjs中使用多个索引页面

javascript - 在html输入中添加带有imaskjs的后缀

javascript - chrome.runtime.onMessage 在后台脚本中未定义(chrome 扩展)

javascript - 通过拖放将 KnockoutJS 与 JQuery 结合使用

google-chrome - 从内容脚本 : Chrome Extension Development 激活 popup.html

javascript - 如何在 iframe 中显示不安全的内容

javascript - 让 Chrome 扩展程序刷新已打开的页面而不是打开新页面

javascript - 替换字符串的脚本在某些网站上不起作用