帮助用户使用chrome工作

时间:2010-04-24 14:41:50

标签: javascript cross-browser google-chrome greasemonkey userscripts

我为Gmail撰写了一份用户说明:Pimp.my.Gmail&我希望它也与谷歌浏览器兼容。
现在我已经尝试了一些事情,尽我所能的Javascript知识(这是非常弱的)&虽然我不确定这是不是正确的方法,但在某种程度上已经取得了成功。

这是我尝试过的,让它在Chrome中运行:
我发现的第一件事是contentWindow.document在chrome中不起作用,所以我尝试了contentDocument,它起作用。
但我注意到一件事,检查Firefox和Chrome中的控制台消息,我看到脚本在Firefox中执行多次,而在Chrome中它只执行一次!
所以我不得不放弃window.addEventListener('load', init, false);行并将其替换为window.setTimeout(init, 5000);,我不确定这是不是一个好主意。

我尝试的另一件事是保留window.addEventListener('load', init, false);行并在window.setTimeout(init, 1000);内使用init(),以防找不到画布。

所以请知道什么是使这个脚本跨浏览器兼容的最佳方法。 哦,我现在所有的耳朵,使这个脚本更好/更有效的代码(这是可能的)

编辑:没有帮助......? :'(

编辑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()方法会永远运行?

1 个答案:

答案 0 :(得分:3)

非常感谢所有帮助过的人! -_- meh

不过,这就是我在脚本开头所需要的全部内容:

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