我为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()
方法会永远运行?
答案 0 :(得分:3)
非常感谢所有帮助过的人! -_- meh
不过,这就是我在脚本开头所需要的全部内容:try { if(top.location.href != window.location.href) { return; } }
catch(e) { return; }