使用jQuery和GreaseMonkey检测Gmail何时完成加载

Ale*_*lec 7 jquery gmail greasemonkey

我正在尝试使用GreaseMonkey脚本向Gmail添加一些jQuery内容.添加jQuery功能工作正常,但问题是我无法真正检测Gmail何时完成加载.

这基本上是发生的事情:

  1. 我刷新了Gmail
  2. 加载窗口开始
  3. 在加载窗口期间,GM脚本启动3次
  4. 加载窗口中的某些内容会发生变化
  5. GM脚本再次启动
  6. 页面更改
  7. GM脚本最后一次启动
  8. Gmail视图加载和完成

此时,一堆JavaScript已加载到DOM中,可能会调用一些使用AJAX加载视图其余部分的函数.

我希望jQuery 第8步之后完成任务,当时所有内容都已完成加载.

有谁知道如何做/检测这个?

Bro*_*ams 5

首先,你可以向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.');
}
Run Code Online (Sandbox Code Playgroud)