0

我为 Gmail 编写了一个用户脚本:Pimp.my.Gmail 并且我也希望它与 Google Chrome 兼容。
现在我已经尝试了几件事,就我的 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) 返回;

(功能() {
var 间隔 = window.setInterval(waitforiframe, 3000);
var 画布;
函数 waitforiframe() {
    console.log("寻找画布框架");
    canvas = document.getElementById("canvas_frame");
    if (canvas && canvas.contentDocument) {
        console.log("找到画布框架");
        pimpmygmail();
    }
}
函数 pimpmygmail() {
    gmail = canvas.contentDocument;
    如果(!gmail)返回;
    window.clearInterval(间隔);
    console.log("让 PIMP.MY.GMAIL !!!");
    ......剩下的代码......
})();

这在 Firefox 中运行良好,但在 Chrome 中,它给了我一个top is undefined错误。我注意到的另一件事是,如果我删除第一行if(document.location != top.location) return;,该waitforiframe()方法会一遍又一遍地被调用。(即我"Finding canvas frame"在控制台中看到错误)

有人能告诉我第一行是做什么的吗?waitforiframe()我的意思是它实现了什么以及如果我删除那条线为什么该方法会永远运行?

4

1 回答 1

3

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

顺便说一句,这就是我在脚本开头所需要的:

try { if(top.location.href != window.location.href) { return; } }
catch(e) { return; }
于 2010-05-01T13:40:32.790 回答