Помогите заставить юзерскрипт работать в хроме

Я написал пользовательский скрипт для 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() на случай, если холст не будет найден.

Поэтому, пожалуйста, дайте мне знать, как лучше всего сделать этот скрипт кроссбраузерным. О, и я прислушиваюсь к тому, чтобы сделать этот скрипт лучше/эффективнее с точки зрения кода (что, я уверен, возможно)

редактировать: нет помощи...? :'(

edit 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() работает вечно, если я удалю эту строку ??


person Vishal Shah    schedule 24.04.2010    source источник
comment
господи, что мне нужно сделать, чтобы получить этот ответ....   -  person Vishal Shah    schedule 26.04.2010
comment
кто-нибудь, ради бога, пожалуйста...   -  person Vishal Shah    schedule 27.04.2010


Ответы (1)


БОЛЬШОЕ СПАСИБО ВСЕМ КТО ПОМОГ! -_- мда

Кстати, это было все, что мне было нужно в начале скрипта:

try { if(top.location.href != window.location.href) { return; } }
catch(e) { return; }
person Vishal Shah    schedule 01.05.2010