Обнаружьте, когда Gmail закончит загружать использование jQuery и GreaseMonkey

Я пытаюсь добавить некоторый материал jQuery к Gmail с помощью сценария GreaseMonkey. Добавление функциональности jQuery хорошо работает, но проблема состоит в том, что я не могу действительно обнаружить, когда Gmail закончил загружаться.

Это в основном, что происходит:

  1. Я обновляю Gmail
  2. Загружающееся окно запускается
  3. Сценарий GM запускается 3 раза, во время загружающегося окна
  4. Что-то в загружающихся изменениях окна
  5. Сценарий GM запускается еще раз
  6. Изменения страницы
  7. Сценарий GM запускается в последний раз
  8. Загрузки представления Gmail и концы

В этой точке набор JavaScript был загружен в DOM, который, вероятно, обращается к некоторым функциям, которые используют Ajax для загрузки остальной части представления.

Я хотел бы за jQuery сделать материал после шага 8, когда все закончило загружаться.

Кто-либо знает, как/обнаружить это?

7
задан Alec 12 August 2010 в 21:02
поделиться

1 ответ

Во-первых, вы можете кричать на Google, чтобы он исправил их gmail-greasemonkey API, который, кажется, ломается все больше с каждым днем. В частности, registerViewChangeCallback () облегчил бы решение, но, похоже, он перестал работать правильно.

Временным решением было бы отложить отмену основных изменений документа. Следующий код , кажется, мне подходит для Firefox. Возможно, потребуется настройка содержимого iFrame.

//
// ==UserScript==
// @name            Fire on page finished (with AJAX mods)
// @namespace       Gmail
// @description     This script shows one way to wait for an AJAX-heavy page to load.
// @include         http://mail.google.com/*
// @include         https://mail.google.com/*
// ==/UserScript==
//

if (window.top != window.self)  //don't run on frames or iframes
    return;


var zGbl_PageChangedByAJAX_Timer = '';


window.addEventListener ("load", LocalMain, false);


function LocalMain ()
{
    if (typeof zGbl_PageChangedByAJAX_Timer == "number")
    {
        clearTimeout (zGbl_PageChangedByAJAX_Timer);
        zGbl_PageChangedByAJAX_Timer  = '';
    }

    document.body.addEventListener ("DOMNodeInserted", PageBitHasLoaded, false);
}


function PageBitHasLoaded (zEvent)
{
    if (typeof zGbl_PageChangedByAJAX_Timer == "number")
    {
        clearTimeout (zGbl_PageChangedByAJAX_Timer);
        zGbl_PageChangedByAJAX_Timer  = '';
    }
    zGbl_PageChangedByAJAX_Timer      = setTimeout (function() {HandlePageChange (); }, 666);
}


function HandlePageChange ()
{
    removeEventListener ("DOMNodeInserted", PageBitHasLoaded, false);

    alert ('Page has finished loading.');
}
5
ответ дан 7 December 2019 в 12:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: