2011-01-27 15 views
4

10分前に私はGreasemonkey用の最初のスクリプトを書くことにしました。私はその経験が全くありません。また、私のJavaScriptは、最後にコードを書いて以来、しばらく経っているので少し錆びています。 Greasemonkeyのは、私は、このエラーを与えている理由しかし、私は理解することはできません。Greasemonkeyで 'document'が定義されていません

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を実行しています。

答えて

5

いくつかのこと:

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

    1. 約:をブラウザに設定してください。
    2. フィルターでgreasemonkey.editor
    3. 有効なエディタへの有効なパスを入力します。私はTextPadが好きですが、c:\Windows\System32\notepad.exeはほとんどのWindowsシステムで動作します。
    4. Firefoxを再起動する必要があります。

  2. イベントリスナーは、グリースモンキーのサンドボックス/セキュリティのためにそのように追加することはできません。 GM pitfalls, event handlersを参照してください。

  3. use unsafeWindow to call a page's JS functionsのように、show_links()のようにする必要があります。

  4. 多くの場合失敗する複雑なajax関数を使用する場合は、try - catchブロックにラップすることをお勧めします。 www.watch-series.comwatch-series.comので、両者

  5. すなわちページスイッチは@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); 
+0

はあなたの非常に徹底した答えをいただき、ありがとうございます。それは多くを説明しますが、最終的に私はまだ同じエラーを取得します。私は「Show More Links」リンクをクリックする必要がない場所で簡単に作業しようとしています。リンクは自動的にロードされます。 show_links()は、JSファイルの一部であり、基本的に追加リンクのAJAXリクエストを作成する関数です。 'idepisod'(エピソードID)という1つのパラメータが必要です。私はそれをぶち壊し続けるつもりです。誰かが知っている、多分私は間違ってまたは何かスクリプトをインストールしました。 – vince88

+0

@ user391369:そのスクリプトをインストールしてhttp://watch-series.com/episode/how_i_met_your_mother_s1_e1-7177.htmlにアクセスすると、スクリプトは完全に機能し、すべてのリンクが表示されます。質問に欠けている重要な情報がない場合は、あなたのGMに[この問題](http://userscripts.org/topics/59474)があるか、FFがその狡猾なMicrosoft .Netプラグインに感染する可能性があります[ここ](https://panopticlick.eff.org/))を確認することができます。 –

+0

ああ、あなたはあなたのGreasemonkeyを知っています。問題はエディタが間違ったパスに設定されていることでした。今それはすべて動作します。ありがとう! – vince88

関連する問題