代码之家  ›  专栏  ›  技术社区  ›  Alec

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

  •  7
  • Alec  · 技术社区  · 14 年前

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

    基本上就是这样:

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

    我想让jQuery做一些事情 之后 第8步,当所有东西都加载完毕。

    有人知道怎么做/检测吗?

    1 回复  |  直到 14 年前
        1
  •  5
  •   Brock Adams    14 年前

    首先,你可以对谷歌大喊大叫来解决他们的问题 gmail-greasemonkey API——它似乎每天都在崩溃。明确地, registerViewChangeCallback() 将有助于解决问题,但它似乎已停止正常工作。

    似乎

    //
    // ==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.');
    }