帮助使Userscript在Chrome中工作
-
01-10-2019 - |
题
我为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; }