Greasemonkey中未定义'document'

时间:2011-01-27 03:31:10

标签: javascript greasemonkey

不超过十分钟前我决定为Greasemonkey编写我的第一个脚本。我没有经验。此外,我的JavaScript有点生疏,因为我上次编写代码已经有一段时间了。但我无法弄清楚为什么Greasemonkey给我这个错误:

Line: 9 
Char: 2 
Error: 'document' is undefined 
Code: 800A1391 
Source: Microsoft JScript runtime error

这是我的剧本:

// ==UserScript==
// @name           Easier WatchSeries
// @namespace      n/a
// @include        http://www.watch-series.com/episode/*
// ==/UserScript==

function thing()
{
    document.body.setAttribute('onload', show_links(document.getElementById('idepisod').value));
}
thing();

我想要做的就是在body标签上添加一个onLoad属性。当我转到“管理新用户脚本”时,我收到此错误 - > “编辑”。除此之外,脚本什么都不做,显然有些不对劲。

我正在运行Firefox 3.6.13。

1 个答案:

答案 0 :(得分:5)

有几件事:

  1. That cryptic error message has been found to happen when Greasemonkey does not have a proper editor set up

    1. 在浏览器中打开 about:config
    2. 过滤 greasemonkey.editor
    3. 输入有效编辑器的有效路径。我喜欢TextPad,但c:\Windows\System32\notepad.exe应该适用于大多数Windows系统。
    4. 可能需要重新启动Firefox。

  2. 由于Greasemonkey的沙盒/安全性,无法以这种方式添加事件侦听器。请参阅GM pitfalls, event handlers

  3. 您需要use unsafeWindow to call a page's JS functions,例如show_links()

  4. 当使用经常失败的复杂的ajax函数时,最好将它们包装在try - catch块中。

  5. 该页面在 www.watch-series.com watch-series.com 之间切换,因此两者都需要位于@include指令。


  6. 总而言之,您的脚本将成为:

    // ==UserScript==
    // @name           Easier WatchSeries
    // @namespace      n/a
    // @include        http://www.watch-series.com/episode/*
    // @include        http://watch-series.com/episode/*
    // ==/UserScript==
    
    function my_func()
    {
        try
        {
            unsafeWindow.show_links(document.getElementById('idepisod').value);
        }
        catch (zError)
        {
            alert (zError); //-- Use console.log() in place of alert(), if running Firebug.
    
        }
    }
    
    window.addEventListener ("load", my_func, false);