我尝试使用内容脚本
manifest
"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
,但显示无效。
我真正需要的是隐藏整个网站而不向客户端显示任何元素。有什么想法吗?
答案 0 :(得分:7)
使用Chrome扩展程序隐藏页面加载前的所有内容
使用run_at
提及@ParagGangil
将其加入manifest
"content_scripts": [
{
"matches": ["*://*/*"],
"js": ["content_script.js"],
"run_at": "document_start" //<-This part is the key
}
]
更多关于"run_at": "document_start"
这应该在content_script.js
_ini();
function _ini(){
document.getElementsByTagName("html")[0].style.display="none";
window.onload=function(){
//do your stuff
document.getElementsByTagName("html")[0].style.display="block"; //to show it all back again
}
}
由于@Xan评论document.body
尚未在content_script.js
加载期间构建,因此我们定位<html>
代码
答案 1 :(得分:3)
在大多数情况下,现有答案都是正确的,但我想提供更多有关所用方法含义的背景信息。在您准备好之前隐藏页面的推荐方法是:
的manifest.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:hidden
vs display:none
您应不使用display = 'none'
,visibility = 'hidden'
,as suggested by Parag Gangli for。选择visibility:hidden
优于display:none
的原因是visibility
不会影响元素的任何维度属性。当元素设置为display:none
时,元素及其所有后代点头的宽度和高度将为0.这可能会破坏依赖于涉及文档树中元素维度的计算的多个页面。
切换display:none
的另一个结果是滚动位置和锚点(#id-of-something
)被打破。浏览器将不再跳转到锚点或上一个滚动位置,而是将页面显示在滚动位置(0,0)。这是非常不受欢迎的。
document.body
vs ... vs document.documentElement
"run_at": "document_start"
时 document.body
不存在,因此无法使用。 document.getElementsByTagName('html')[0]
有效,但可以更简洁地写成document.documentElement
(=文档的根目录)。
window.onload
vs DOMContentLoaded
window.onload
仅在所有资源(图像,帧等)完全加载时触发。这可能需要一段时间,因此在触发window.onload
事件之前隐藏整个页面是个坏主意。
在大多数情况下,您的扩展程序仅取决于文档结构,因此修改文档并在DOMContentLoaded
事件中显示文档就足够了。
答案 2 :(得分:1)
由于您不想删除数据而只是隐藏所有内容,请使用:
document.body.style.visibility="hidden";
这将隐藏页面中的所有内容。