2009-10-12 19 views
5

GreasemonkeyスクリプトをSafariおよびChromeと互換性を持たせたいとします。Firefox、Safari、Opera、chrome(onloadイベント)とのGreasemonkeyスクリプトの互換性

Firefoxでは、GreasemonkeyスクリプトはDOMの準備ができたときにのみ実行されます。 DOMの準備が整う前に、Chrome、Safari、OperaでGreasemonkeyスクリプトが実行されているようです。

私が探しているのは、ページ上でリスナーを実行し、DOMのロード/準備完了イベントを待って、そのイベントを受け取った後、残りのスクリプトを実行するソリューションです。使用しているブラウザがChrome、Safari、Operaの場合彼らがFirefoxを使用している場合は、すぐにスクリプトを実行し、イベントリスナーを気にする必要はありません。

これをコードする方法?そのスクリプトはまた、Google Chromeの互換性があるかどう

@NV

おかげNV、あなたは知っていますか?コード

(function(){ 

    // Code here run after 'load' event in all browsers. 

})(); 

はまた、Google Chromeの準備ができてDOM上で実行されます

答えて

-1

JQueryのようなJavaScriptライブラリがこれをどのように引き出すかを見てみるといいでしょう。それは実際には重すぎるので実際にはこの問題を解決したことはないでしょう。

1

まず、 UserJSをご覧ください。 Greasemonkey、Opera、Safari Greasekitで動作します。

ページロード後にいくつかのコードを実行する場合は、イベントリスナーはまったく必要ありません。

... safari + opera、domが準備が整う前にgmスクリプトを実行しているようです。

いいえ実際は、もっと複雑です。オペラはgreasemokey compatible modeです。 yada-yadaという名前のすべてのスクリプト.user .jsが互換モードで実行され、 DOMが準備完了した後にを実行します。

注:コードを匿名関数にラップすると、グローバルウィンドウオブジェクトへの可変リークを防ぐことができます(これはOperaで行われます)。

(function(){ 

    // Some code 

})(); 

この場合、Safari GreasekitはFirefox Greasemonkeyのように動作します。

+2

無名関数でコードをラップするだけでは、ロードイベントの後まで実行が延期されません。上記の答えの最初の部分は間違っていて誤解を招きます。 – hallvors

+0

ホールバー、あなたは正しいです!たぶん私ははっきりと話していません。私は答えを更新しました。 – NVI

+0

コミュニティWikiに回答をマークしました。それで、編集することができます。 – NVI

0

私は縮小さjQueryのを取り、私のuserscriptにそれを貼り付けコピーし、あなたのjQueryを与えることの追加ボーナスを持っている古典的な

$(document).ready(function() { 
     // Put all your jQuery goodness in here. 
    }); 

、別の質問で述べた機能に包ますべてやった:

(function(){ 

    // Some code. 

})(); 

Greasemonkeyのものを使ってjQueryをURLの上部にインポートできますが、これはGreasemonkey固有のものです。この場合、Chrome/Operaなどは互換性がありません。

関連する問題