我创建了一个小的命令式原始JavaScript脚本来阻止分散注意力的新闻网站,让我感到上瘾的行为是:
// ==UserScript==
// @name blocksite
// @match *://*.news_site_1.com/*
// @match *://*.news_site_2.com/*
// ==/UserScript==
function blocksite () {
document.body.innerHTML =`<div dir="ltr"; style="font-size:100px; font-weight: bold; text-align: center">Blocked !</div>`;
}
setTimeout( blocksite(),1000)
setTimeout( blocksite(),5000) // Block possible later DOM mutations;
setTimeout( blocksite(),10000) // Block possible later DOM mutations;
该脚本基本上可以正常工作(弹出窗口会接管DOM),但是我的问题是,仅在解析和呈现了所有DOM内容之后,它才会阻止站点,而我通常希望阻止解析。
虽然收听load
事件为时已晚,但收听早期的DOMContentLoaded
事件可能比收听load
或收听setTimeout()
的结果更好,因为内容解析后,而不是呈现后,可能会发生阻塞。
但是,我需要一种完全阻止对相关网站的任何网页进行解析的方法(或者,在解析第一个DOM HTML元素节点之后,阻止任何进一步的解析)。
我尝试过的
每条评论,我都在Google Chrome浏览器中尝试过
window.stop();
我不记得有什么重大变化window.close();
仅在devtool控制台上对我有用window.location.replace("about:blank");
它仅对load
事件完成后才起作用,而不是在解析开始时起作用
我的问题
使用最新的ECMAScript(10)甚至不需要执行该操作,如果需要,应该使用什么命令?
Sxribe更新:
亲爱的Sxribe,我用以下代码创建了以下文件。
该文件确实是由Tampermonkey加载的(带有正确的@match
列表),但是加载匹配的网站时,我发现浏览器没有任何变化(这些网站没有被阻止且无法正常加载)。
文件中的代码
<!DOCTYPE html>
<html>
<head>
<title>Page Title</title>
</head>
<body>
<h1>This is a Heading</h1>
<p>This is a paragraph.</p>
</body>
</html>
Tampermonkey中的文件调用
window.open("C:\Users\MY_USER_NAME\Desktop\blocksite.html");