小编Sha*_*ade的帖子

阻止每个网站域解析所有或某些DOM内容

我创建了一个小的命令式原始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;
Run Code Online (Sandbox Code Playgroud)

该脚本基本上可以正常工作(一个弹出窗口会接管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列表),但是加载匹配的网站时,我没有看到浏览器的任何更改(这些网站未被阻止并正常加载)。

文件中的代码 …

javascript parsing dom dom-events ecmascript-2018

7
推荐指数
2
解决办法
146
查看次数

标签 统计

dom ×1

dom-events ×1

ecmascript-2018 ×1

javascript ×1

parsing ×1