简体   繁体   中英

Tampermonkey script run before page load

I need to hide a section from an html page:

<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>

The following code works fine in Chrome dev. tools

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

But when I load the page with the script active, the section (h1) won't disappear. I believe this is because when the script runs, the DOM has not been completed loaded yet, hence the script fails to find the selector.

I have tried many different things (eg window.onLoad) but still my script is not effective. Last attempt (failed) is the following:

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

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

Required:

  • @run-at: document-start in userscript metablock.

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

Now with the above your options are:

  1. Simply inject a style that hides the logo:

     (document.head || document.documentElement).insertAdjacentHTML('beforeend', '<style>h1.logo.floatLeft { display: none!important; }</style>');
  2. Use MutationObserver to detect and delete the element immediately after it's added into 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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM