我已经写了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()
方法永远运行,如果我删除该行?
哎呀,我需要什么做的就是这个回答.... – 1nfected 2010-04-26 17:28:44
某人天的缘故,请... – 1nfected 2010-04-27 16:50:02