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; }