在JS中加载文档之前调用函数

Calling a function before the document loads up in JS

本文关键字:调用 函数 文档 JS 加载      更新时间:2023-09-26

我的朋友让我这么做。

他需要阻止他的孩子访问某些网站。

他给猴子装了铬。我必须在篡改猴子中制作一个脚本,这样当它到达网站时,它就会更改网站内容。

源代码是:

// ==UserScript==
// @name       My Fancy New Userscript
// @namespace  http://use.i.E.your.homepage/
// @version    0.1
// @description  enter something useful
// @match      http://www.harmful-website.com/*
// @copyright  2012+, You
// ==/UserScript==
document.write("<b>You are not allowed to visit this site</b>");

此脚本只有在网站已满加载后才能工作。但是他的孩子在中间停止加载网站,他们可以查看其中的一部分

即使document.onload=function(){document.write("...");}在加载后也能工作。是否有任何方法可以在加载文档之前运行脚本,即在地址栏上键入网址或单击超链接之后立即运行。

您的代码会工作,您只需要设置@run-at document-startDoc,如下所示:

// ==UserScript==
// @name        site blocker
// @match       http://www.harmful-website.com/*
// @run-at      document-start
// ==/UserScript==
document.write ("<b>You are not allowed to visit this site</b>");


重要信息:

  1. 这将在Chrome和Tampermonkey上运行,但在其他浏览器上不起作用。例如,在Firefox上,document.write调用将抛出错误:

    错误:操作不安全。

    (但页面仍然是一片空白。)

  2. 尽管像这样的用户脚本可以工作(大部分);它是一种笨拙、脆弱、低性能的方法,很容易被击败。以下是一些对精明的孩子来说更好、更快、更容易、更难的方法:

    • 使用家庭路由器的站点块和/或家长控制。现在,几乎每个路由器和/或调制解调器都有这个功能
    • 安装许多执行这种阻塞的扩展中的一个
    • 使用Adblock规则阻止网站
    • 使用计算机的主机文件阻止站点
    • 使用代理服务器
    • 在超级用户上搜索更多选项

只需在定义函数后立即调用它。就像在页眉或其他地方一样。

然而,您需要考虑函数是否真的拥有它所需要的一切,比如页面上的HTML元素(如果它访问其中的任何元素),因为在调用函数时不一定会加载这些元素。

HTML文件是逐行解析的。所以如果你写你的<script>在<html>标记它将在执行任何其他操作之前执行。