关于javascript:如何在GreaseMonkey脚本中实现” DOM Ready”事件?

关于javascript:如何在GreaseMonkey脚本中实现” DOM Ready”事件?

How to implement “DOM Ready” event in a GreaseMonkey script?

我正在尝试将GreaseMonkey脚本修改为从window.onload触发到window.DOMContentLoaded,但是此事件从不触发。

我正在使用FireFox 2.0.0.16 / GreaseMonkey 0.8.20080609

这是我要修改的完整脚本,更改为:

1
window.addEventListener ("load", doStuff, false);

1
window.addEventListener ("DOMContentLoaded", doStuff, false);

所以我用谷歌搜索了研究对象,并且第一个结果似乎是表明该脚本实际上是在" DOM ready"下运行的,因此您只需要删除onload调用并立即运行该脚本即可。

我删除了window.addEventListener ("load", function() {}, false);package,并且效果很好。这样,它的响应速度更快,页面立即显示,并已应用了脚本,并且突出显示了所有看不见的问题,根本没有闪烁。还有很多喜乐...是的。


GreaseMonkey脚本本身是在DOMContentLoaded上执行的,因此无需添加加载事件处理程序-只需让脚本立即执行所需的任何操作即可。

http://wiki.greasespot.net/DOMContentLoaded


@Sam:是的,我正在尝试相同的方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
// ==UserScript==
// @name           Stack Overflow highlight viewed questions
// @namespace      *
// @include        http://stackoverflow.com/questions
// @include        http://stackoverflow.com/questions?*
// @include        http://stackoverflow.com/questions
// @include        http://stackoverflow.com/questions?*
// @version        0.55 (DOM-Ready instead of onload)
// ==/UserScript==

(function() {

    // Customizable items
    // var fav_tags = ["python","database","mysql"];          // Your favorite tags
    const UNSEEN_BACK_COLOR ="rgb(225,210,210)";     // Backcolor for the question already seen
    const FAV_TAG_BACK_COLOR ="rgb(210,210,225)";  // Backcolor for the favorite tags

    // Internal to the DOM
    // const QUESTION_URL ="http:\\/\\/stackoverflow.com\\/questions\\/([0-9]+)\\/";
    const QUESTION_URL ="http:\\/\\/stackoverflow.com\\/questions\\/([0-9]+)\\/";
    const TAG_PREFIX ="show questions tagged";

    const SEEN_MARK ="x";
    //

    var seen_q = [];
    var seen_q_str ="";

    var seen_q_str = GM_getValue ("seen_q","");
    var seen_q = seen_q_str.split("|");

    var fav_tags_str = GM_getValue ("fav_tags","")
    var fav_tags = fav_tags_str.split("")

    var already_run = false;

    GM_registerMenuCommand ("Set favorite tags", askTags);

    // window.addEventListener ("DOMContentLoaded", doStuff, false);
    if (! doStuff()) {
        window.addEventListener ("load", doStuff, false);
    }

    function doStuff() {

        var elements = window.document.getElementsByTagName('A');

        if (! elements || already_run) {
            return false;
        } else {
            already_run = true;
        }

        GM_log ("here");

        for (elem = 0; elem < elements.length; elem++) {
            if (elements[elem].href.match (QUESTION_URL)) {
                curr_q = RegExp.$1;

                // Already seen?
                if ((seen_q.length < curr_q) || (seen_q [curr_q] != SEEN_MARK)) {
                    elements[elem].style.backgroundColor = UNSEEN_BACK_COLOR;
                    seen_q [curr_q] = SEEN_MARK;
                }

                // Is a favorite tag?
                node = elements[elem].parentNode.parentNode;
                for (tag = 0; tag <= fav_tags.length; tag++) {
                    if (node.innerHTML.match ("'" + fav_tags[tag] +"'")) {
                        node.style.backgroundColor = FAV_TAG_BACK_COLOR;
                        break;
                    }
                }

                // return (0);
            }
        }

        seen_q_str = seen_q.join("|");
        GM_setValue ("seen_q", seen_q_str);

        return true;
    }


    function askTags() {
        fav_tags_str = prompt("Favorite tags (separated by spaces)", fav_tags_str);
        GM_setValue ("fav_tags", fav_tags_str)
    }

})();

推荐阅读

    修改时间命令linux?

    修改时间命令linux?,时间,系统,命令,大陆,国家,信息,时区,终端,时分,日期,如

    linux脚本命令教学?

    linux脚本命令教学?,标准,数据,系统,脚本,代码,流程,官网,底部,命令,变量,lin

    linux命令注释脚本?

    linux命令注释脚本?,代码,工具,名称,工作,脚本,发行,服务,环境,数据,基础,lin

    脚本linux上运行命令?

    脚本linux上运行命令?,工具,代码,时间,密码,系统,环境,名字,位置,第三,下来,t

    linux中路径修改命令?

    linux中路径修改命令?,系统,命令,首次,工作,名称,目录,文件,环境变量,路径,

    linux修改脚本的命令?

    linux修改脚本的命令?,系统,密码,服务,工作,工具,环境,信息,百度,代码,脚本,

    linux运行命令的脚本?

    linux运行命令的脚本?,系统,服务,工具,脚本,意外,技术,分析,文件,方法,命令,s

    linux脚本命令单引号?

    linux脚本命令单引号?,系统,工作,美元,地址,命令,信息,情况,标准,管理,引号,l

    linux修改命令所属组?

    linux修改命令所属组?,系统,信息,档案,工具,状态,文件,命令,设备,检测,环境,l

    执行linux脚本命令行?

    执行linux脚本命令行?,工具,位置,地方,环境,数据,状态,暂停,增长,系统,基础,

    linux下修改端口命令?

    linux下修改端口命令?,代码,服务,端口,系统,文件,编辑,后果,命令,字段,下面,L

    linux修改名称命令?

    linux修改名称命令?,系统,名称,图片,查询系统,代码,名字,命令,用户,文件名,

    linux运行脚本的命令?

    linux运行脚本的命令?,系统,工具,代码,服务,脚本,状态,密码,环境,位置,暂停,l

    linux修改时区的命令?

    linux修改时区的命令?,时间,系统,大陆,国家,标准,时区,命令,日期,终端,方法,L

    linux网络修改命令?

    linux网络修改命令?,地址,网络,系统,工作,服务,代码,管理,命令,工具,设备,Lin

    如何在linux执行命令?

    如何在linux执行命令?,单位,电脑,命令,系统,基础,发行,工具,工作,信息,文件,m

    linux修改内存命令?

    linux修改内存命令?,系统,信息,标准,工具,数据,在线,内存,命令,分区,大小,Lin

    linux修改用户名命令?

    linux修改用户名命令?,系统,密码,查询系统,代码,数字,用户名,命令,第三,电

    linux命令换行后修改?

    linux命令换行后修改?,服务,系统,本行,代码,环境,工作,命令,文件,终端,字符,