除非页面刷新,否则润滑脂/ tampermonkey脚本无法正常工作

时间:2015-12-02 21:02:03

标签: javascript greasemonkey tampermonkey

我频频出现一个忽视用户的可怕方式的论坛。如果你忽略某人,那几乎会使用户的存在更加普遍。

所以我写这篇文章是为了完全隐藏它们:

// ==UserScript==
// @name         Freddie
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  hide annoying forum users
// @author       You
// @match        http://www.scout.com/college/kansas/forums/*
// @grant        none
// ==/UserScript==
/* jshint -W097 */

'use strict';

function checkForDiv() { // crappy workaround function to wait for AJAX content      
    if (!document.getElementById("wrapper")) {        
        setTimeout(checkForDiv, 300);   
    } else {       
        checkNames();   
    }
}

function checkNames() {  
    var mybannedList = ["Pyros", "GOHawksGators", "th30r3o"]; // add usernames  here
    var nms = document.body.querySelectorAll('a.authName'), i = 0, len =  nms.length;
    for (i; i < len; i++) {
        if (mybannedList.indexOf(nms[i].innerHTML) != -1) {
          nms[i].parentNode.parentNode.style.display = "none";
        }
    }
}

checkForDiv();  

但是当您使用被忽略的用户进入页面时,它们仍然会出现,刷新后,脚本会运行并消失。

请好先生,我该怎么办?

1 个答案:

答案 0 :(得分:1)

该网站使用AJAX进行导航,因此页面地址无需重新加载即可更改,这就是为什么当您从该网站上的其他页面导航时,Tampermonkey不会注入您的脚本。

最简单的解决方案是包含整个网站:// @match http://www.scout.com/*

还有其他更先进的方法可以检测基于MutationObserver的页面转换或导航时发生的某些DOM事件或属性更改。

还要注意@grant none通过@require加载jQuery:它会破坏除了使用jQuery.noConflict之外还加载jQuery的网站。最简单的解决方案是删除该行,因为您不需要访问网页变量。

P.S。有一个已知的基于计时器的包装器:waitForKeyElements