现有的答案在大多数情况下都是正确的,但我想提供有关所用方法的含义的更多背景信息。在您准备好之前隐藏页面的推荐方法是:
清单.json:
{
...
"content_scripts": [{
"matches": ["*://*/*"],
"js": ["contentscript.js"],
"run_at": "document_start"
}],
...
}
内容脚本.js
document.documentElement.style.visibility = 'hidden';
document.addEventListener('DOMContentLoaded', function() {
// ... do something ... and then show the document:
document.documentElement.style.visibility = '';
});
visibility:hidden
vs display:none
你应该not use display = 'none'
, but visibility = 'hidden'
, 正如 Parag Gangli 所建议的。优先选择的理由visibility:hidden
over display:none
就是它visibility
不影响元素的任何尺寸属性。当一个元素设置为display:none
,那么该元素及其所有后代节点的宽度和高度将为 0。这可能会破坏依赖于涉及文档树中元素尺寸的计算的多个页面。
切换的另一个后果display:none
是滚动位置和锚点(#id-of-something
)已损坏。浏览器将不再跳转到锚点或上一个滚动位置,而是在滚动位置(0,0)处显示页面。这是非常不希望的。
document.body
对...对document.documentElement
document.body
不存在时"run_at": "document_start"已设置,因此无法使用。document.getElementsByTagName('html')[0]
有效,但可以更简洁地写为document.documentElement
(= 文档的根目录)。
window.onload
vs DOMContentLoaded
window.onload
仅当所有资源(图像、帧等)完全加载时才会触发。这可能需要一段时间,因此隐藏整个页面直到window.onload
事件被触发。
在大多数情况下,您的扩展仅取决于文档结构,因此修改文档并在DOMContentLoaded
事件就足够了。