Jo *_* E. 2 javascript google-chrome-extension
我尝试使用内容脚本
manifest
"content_scripts": [
{
"matches": ["*://*/*"],
"js": ["js/content_script.js"]
}
]
Run Code Online (Sandbox Code Playgroud)
content_script.js
_ini();
function _ini(){
document.body.style.display="none";
}
Run Code Online (Sandbox Code Playgroud)
但它首先加载页面然后隐藏它.
所以我试过了 webNavigation
chrome.webNavigation.onCommitted.addListener(function(details){
alert('webnav');
document.body.style.display="none";
});
Run Code Online (Sandbox Code Playgroud)
但上面也没有用.该页面webnav在页面加载之前发出警报但显示无效.
我真正需要的是隐藏整个网站而不向客户展示任何元素.有任何想法吗?
使用Chrome扩展程序在页面加载前隐藏所有内容
使用run_atAs @ParagGangil提到
包括在内 manifest
"content_scripts": [
{
"matches": ["*://*/*"],
"js": ["content_script.js"],
"run_at": "document_start" //<-This part is the key
}
]
Run Code Online (Sandbox Code Playgroud)
有关"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
}
}
Run Code Online (Sandbox Code Playgroud)
由于@Xan评论document.body在加载期间尚未构建,content_script.js因此我们定位<html>标记
在大多数情况下,现有答案是正确的,但我想提供有关所用方法的含义的更多背景信息。在您准备好之前隐藏页面的推荐方法是:
清单.json:
{
...
"content_scripts": [{
"matches": ["*://*/*"],
"js": ["contentscript.js"],
"run_at": "document_start"
}],
...
}
Run Code Online (Sandbox Code Playgroud)
内容脚本.js
document.documentElement.style.visibility = 'hidden';
document.addEventListener('DOMContentLoaded', function() {
// ... do something ... and then show the document:
document.documentElement.style.visibility = '';
});
Run Code Online (Sandbox Code Playgroud)
visibility:hidden 对比 display:none你应该不使用display = 'none',但是visibility = 'hidden',由Parag港利的建议。之所以宁愿visibility:hidden在display:none是visibility不影响元素的任何尺寸特性。当一个元素设置为 时display:none,该元素及其所有后代节点的宽度和高度都将为 0。这可能会破坏多个页面,这些页面依赖于涉及文档树中元素尺寸的计算。
切换的另一个后果display:none是滚动位置和锚点 ( #id-of-something) 被破坏。浏览器将不再跳转到锚点或上一个滚动位置,而是在滚动位置 (0,0) 处显示页面。这是非常不可取的。
document.body VS ... VS document.documentElementdocument.body"run_at": "document_start"设置时不存在,因此无法使用。document.getElementsByTagName('html')[0]有效,但可以更简洁地写为document.documentElement(= 文档的根)。
window.onload 对比 DOMContentLoadedwindow.onload仅当所有资源(图像、帧等)完全加载时才会触发。这可能需要一段时间,因此在window.onload触发事件之前隐藏整个页面是一个坏主意。
在大多数情况下,您的扩展仅取决于文档结构,因此修改文档并在DOMContentLoaded活动中显示文档就足够了。
| 归档时间: |
|
| 查看次数: |
2339 次 |
| 最近记录: |