脚本启动的脚本和多个迭代

时间:2015-03-17 19:59:33

标签: firefox javascript

// ==UserScript==
// @id             rtskincruff
// @name           Right Gmail
// @version        1.0
// @namespace      OK
// @author         Exaskryz
// @description    
// @include        https://mail.google.com/*
// @run-at         window-load
// ==/UserScript==
//I tried for the @run-at document-end and document-idle
var colored = setInterval(function () {coloring()}, 10000);

function coloring() {
console.log("ping");
var name = document.getElementsByClassName("gb_l gb_n");
console.log("got name");
console.log(name.length);
if (name[0].innerHTML = "+Exaskryz") {
    name[0].style.color = "#FF0000";
    name[0].style.fontSize = "xx-large";
    name[0].innerHTML = "WRONG ACCOUNT TO SEND EMAIL FROM";
    //var backg = document.getElementsByClassName("AO");
    //backg[0].style.backgroundColor = "#FF0000";
    } else if (name[0].innerHTML = "WRONG ACCOUNT TO SEND EMAIL FROM") {
    clearInterval(colored);
    alert("pun");
    }    

该脚本正在启动5次,我无法弄清楚为什么或如何停止其他实例。其他实例似乎永远无法找到具有类名(gb_l gb_n)的任何元素,并向我报告name.length 0。这也很奇怪,因为它只会到达记录name.length的部分,并且永远不会执行任何其他console.log UNLESS 它确实获得了变量名称的值

这是完整的脚本,试图找出如何阻止此脚本每10秒运行一次(最初设置为1秒):

    // ==UserScript==
    // @id             rtskincruff
    // @name           Right Gmail
    // @version        1.0
    // @namespace      OK
    // @author         Exaskryz
    // @description    
    // @include        https://mail.google.com/*
    // @run-at         document-idle
    // ==/UserScript==

    var colored = setInterval(function () {coloring()}, 10000);

    function coloring() {
    console.log("ping");
    var name = document.getElementsByClassName("gb_l gb_n");
    console.log("got name");
    console.log(name.length);
    if (name[0].innerHTML = "+Exaskryz") {
        name[0].style.color = "#FF0000";
        name[0].style.fontSize = "xx-large";
        name[0].innerHTML = "WRONG ACCOUNT TO SEND EMAIL FROM";
        //var backg = document.getElementsByClassName("AO");
        //backg[0].style.backgroundColor = "#FF0000";
        } else if (name[0].innerHTML = "WRONG ACCOUNT TO SEND EMAIL FROM") {
        clearInterval(colored);
        alert("pun");
        }
    console.log("passed first if");
        if (name.length>0) {
            if (name[0].innerHTML = "+Exaskryz") {
                name[0].style.color = "#FF0000";
                name[0].style.fontSize = "xx-large";
                name[0].innerHTML = "WRONG ACCOUNT TO SEND EMAIL FROM";
                //var backg = document.getElementsByClassName("AO");
                //backg[0].style.backgroundColor = "#FF0000";
            alert("bun");
            clearInterval(colored);
            alert("done");
            }
        }
    console.log("passed second if");
    var nong = document.getElementsByClassName("gb_K gb_ka gb_n gb_ga");
    console.log("got nong");
    alert(nong.length);
    if (nong[0].innerHTML = "CorrectAccount@gmail.com") {
        alert("hun");
       clearInterval(colored);
       alert("done");
    }
}

1 个答案:

答案 0 :(得分:0)

这是一个黑暗的镜头,但您的脚本可能也在mail.google.com上的任何iframe上运行。要阻止脚本在iframe上运行,有两个选项。

在脚本的元数据块中,您可以将@noframes设置为true。

// @noframes true

或者,您可以在脚本的开头检查脚本的窗口是否实际上是“最顶层”窗口。

if (window != window.top) { return; }