0

我已經寫了Gmail的用戶腳本:Pimp.my.Gmail &我希望它也與Google Chrome兼容。
現在我已經嘗試了一些東西,盡我所知的Javascript知識(這是非常薄弱的​​)&已經取得了一定的成功,儘管我不知道它是否是正確的方式。幫助使腳本工作在鉻

這裏就是我試過了,都讓它在Chrome瀏覽器:
我發現的第一件事情就是contentWindow.document不鍍鉻工作,所以我嘗試contentDocument,它的工作原理。
但我注意到一件事,檢查Firefox和Chrome中的控制檯消息,我看到腳本在Firefox中多次執行,而在Chrome中它只執行一次!
所以我不得不放棄window.addEventListener('load', init, false);行,並用window.setTimeout(init, 5000);取代它,我不確定這是個好主意。

我試過的另一件事是保持window.addEventListener('load', init, false);行,並在init()內使用window.setTimeout(init, 1000);以防萬一找不到畫框。

所以,請讓我知道什麼是使這個腳本跨瀏覽器兼容的最佳方式。 哦,我的所有耳朵,使這個腳本更好/有效的代碼明智(這肯定是可能的)

編輯:沒有幫助...? :'(

編輯4月28日:
我重新寫的代碼一點,現在看起來是這樣的:

 
if(document.location != top.location) return; 

(function() { 
var interval = window.setInterval(waitforiframe, 3000); 
var canvas; 
function waitforiframe() { 
    console.log("Finding canvas frame"); 
    canvas = document.getElementById("canvas_frame"); 
    if (canvas && canvas.contentDocument) { 
     console.log("Found canvas frame"); 
     pimpmygmail(); 
    } 
} 
function pimpmygmail() { 
    gmail = canvas.contentDocument; 
    if(!gmail) return; 
    window.clearInterval(interval); 
    console.log("Lets PIMP.MY.GMAIL!!!"); 
    ......rest of the code...... 
})();

這工作完全正常在Firefox,但在Chrome瀏覽器,它給了我一個top is undefined錯誤。 我注意到另一件事是,如果我刪除第一行if(document.location != top.location) return;,該waitforiframe()方法不斷得到所謂的一遍又一遍。(即我看到控制檯"Finding canvas frame"錯誤)

有人能告訴我第一行是幹什麼的?我的意思是它實現了什麼&爲什麼waitforiframe()方法永遠運行,如果我刪除該行?

+0

哎呀,我需要什麼做的就是這個回答.... – 1nfected 2010-04-26 17:28:44

+0

某人天的緣故,請... – 1nfected 2010-04-27 16:50:02

回答

3

非常感謝所有幫助過的人! -_- MEH

順便說一句,這是所有我需要在腳本的開頭:

try { if(top.location.href != window.location.href) { return; } } 
catch(e) { return; }