Gmail のユーザー スクリプトを作成しました: Pimp.my.Gmail & Google Chrome とも互換性があるようにしたいと思います。
今、私はいくつかのことを試しましたが、Javascript の知識 (非常に弱い) の範囲内で、ある程度までは成功しましたが、それが正しい方法かどうかはわかりません。
Chromeで動作させるために私が試したのは次のとおりです
。最初に見つけたのは、それcontentWindow.document
が動作しないということcontentDocument
です。
しかし、Firefox と Chrome でコンソール メッセージを確認すると、Firefox ではスクリプトが複数回実行されるのに対し、Chrome では 1 回だけ実行されることがわかりました。
だから私はラインを放棄してwindow.addEventListener('load', init, false);
それを置き換える必要がwindow.setTimeout(init, 5000);
ありましたが、これが良い考えかどうかはわかりません.
私が試したもう1つのことは、キャンバスフレームが見つからない場合に備えて、window.addEventListener('load', init, false);
行を保持し、window.setTimeout(init, 1000);
内部で使用することです.init()
ですから、このスクリプトをクロスブラウザ対応にする最善の方法を教えてください。ああ、私はこのスクリプトをより良く/効率的なコードにするためのすべての耳を傾けています (これは確かに可能です)
編集:仕方がない…?:'(
edit 28-Apr:
コードを少し書き直したところ、次のようになりました。
if(document.location != top.location) return; (関数() { var interval = window.setInterval(waitforiframe, 3000); var キャンバス; 関数waitforiframe() { console.log("キャンバスフレームを探しています"); canvas = document.getElementById("canvas_frame"); if (キャンバス && canvas.contentDocument) { console.log("キャンバス フレームが見つかりました"); pimpmygmail(); } } 関数 pimpmygmail() { gmail = canvas.contentDocument; if(!gmail) リターン; window.clearInterval(インターバル); console.log("レッツ PIMP.MY.GMAIL!!!"); ……残りのコード…… })();
これは Firefox では問題なく動作しますが、Chrome ではtop is undefined
エラーが発生します。私が気付いたもう1つのことは、最初の行を削除するif(document.location != top.location) return;
と、waitforiframe()
メソッドが何度も呼び出され続けることです。(つまり"Finding canvas frame"
、コンソールにエラーが表示されます)
誰かが最初の行が何をするか教えてもらえますか? 私はそれが何を達成するのか、waitforiframe()
その行を削除するとメソッドが永久に実行されるのはなぜですか??