防止创建任何DOM内容

问题描述 投票:1回答:2

[我创建了一个小的命令式原始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元素节点之后,阻止任何进一步的解析)。

最后一个ECMAScript(10)甚至还需要我做什么,如果可以的话,该命令的名字是什么?


更新

根据评论,我尝试在Google Chrome浏览器中尝试以下代码:

window.close()

仅在devtool控制台上对我有用。

window.stop()

我不记得有什么重大变化。

window.location.replace("about:blank");

[它仅在load事件完成后才起作用,而不是在解析开始时才起作用。

javascript parsing dom javascript-events ecmascript-2018
2个回答
1
投票

要中止网站的加载,您可以简单地使用window.stop()方法。


0
投票

您可以在Documents文件夹中创建一个文件,然后在打开该网站时重定向到该文件。让我解释一下:

© www.soinside.com 2019 - 2024. All rights reserved.