gpt4 book ai didi

javascript - Tampermonkey 脚本在页面加载之前运行

转载 作者:太空狗 更新时间:2023-10-29 13:37:02 27 4
gpt4 key购买 nike

我需要在 html 页面中隐藏一个部分:

<h1 data-ng-show="!menuPinned &amp;&amp; !isSaaS" class="logo floatLeft" aria-hidden="false"><span>XXX&nbsp;</span><span style="font-weight: bold;">XXX&nbsp;</span><span>XXXXX</span></h1>

以下代码在 Chrome 开发者中运行良好。工具

var ibmlogo = document.querySelectorAll('h1.logo.floatLeft');
ibmlogo[1].remove();

但是当我在脚本处于事件状态的情况下加载页面时,(h1) 部分不会消失。我相信这是因为当脚本运行时,DOM 还没有完成加载,因此脚本找不到选择器。

我尝试了很多不同的东西(例如 window.onLoad),但我的脚本仍然无效。最后一次尝试(失败)如下:

var logo = document.querySelectorAll('h1.logo.floatLeft');
logo.onload = function() {removeLogo()};

function removeLogo(){
console.log("### logo array lenght: " + logo.length);
logo[1].remove();
};

最佳答案

必需:

  • @run-at: document-start在用户脚本元区 block 中。

    // ==UserScript==
    ..............
    // @run-at document-start
    ..............
    // ==/UserScript==

现在有了上面的选项,你的选择是:

  1. 只需注入(inject)一个隐藏 Logo 的样式:

    (document.head || document.documentElement).insertAdjacentHTML('beforeend',
    '<style>h1.logo.floatLeft { display: none!important; }</style>');
  2. 使用 MutationObserver在元素添加到 DOM 后立即检测并删除该元素。

    new MutationObserver(function(mutations) {
    // check at least two H1 exist using the extremely fast getElementsByTagName
    // which is faster than enumerating all the added nodes in mutations
    if (document.getElementsByTagName('h1')[1]) {
    var ibmlogo = document.querySelectorAll('h1.logo.floatLeft')[1];
    if (ibmlogo) {
    ibmlogo.remove();
    this.disconnect(); // disconnect the observer
    }
    }
    }).observe(document, {childList: true, subtree: true});
    // the above observes added/removed nodes on all descendants recursively

关于javascript - Tampermonkey 脚本在页面加载之前运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39346747/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com