我为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() 如果找不到CanvasFrame。

因此,请让Lemme知道将此脚本交叉浏览器兼容的最佳方法。哦,我所有的耳朵都可以使此脚本更好/有效的代码(肯定是可能的)

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

编辑28-APR:
我重新编写了代码,现在看起来像这样。

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() 如果我删除该行,方法永远运行?

有帮助吗?

解决方案

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

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

try { if(top.location.href != window.location.href) { return; } }
catch(e) { return; }
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top