Greasemonkey中未定义'document'

问题描述 投票:4回答:1

不到十分钟前我决定为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。

javascript greasemonkey
1个回答
5
投票

几件事:

  1. That cryptic error message has been found to happen when Greasemonkey does not have a proper editor set up。 在浏览器中打开about:config。 过滤greasemonkey.editor。 输入有效编辑器的有效路径。我喜欢TextPad,但c:\Windows\System32\notepad.exe应该适用于大多数Windows系统。 您可能需要重新启动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指令中。

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

// ==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);
© www.soinside.com 2019 - 2024. All rights reserved.