[英]Help making userscript work in chrome
我已經為Gmail寫了一個用戶腳本: Pimp.my.Gmail ,我也希望它也與Google Chrome兼容。
現在,據我所知,我已經嘗試了幾件事(非常薄弱),並且在一定程度上取得了成功,盡管我不確定這是否是正確的方法。
這是我嘗試過的方法,以使其可在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。
因此,請讓我知道使該腳本跨瀏覽器兼容的最佳方法是什么。 噢,我是全力以赴地使這個腳本更好/更有效的代碼(我肯定是可能的)
編輯:沒有幫助...? :'(
編輯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()
方法將永遠運行?
非常感謝所有人的幫助! -_-嗯
順便說一句,這就是我在腳本開始時所需要的:
try { if(top.location.href != window.location.href) { return; } }
catch(e) { return; }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.