我正在尝试使用GreaseMonkey脚本向Gmail添加一些jQuery内容。添加jQuery功能工作正常,但问题是我无法真正检测到Gmail何时完成加载。
这基本上就是这样:
此时已经将一堆JavaScript加载到DOM中,这些JavaScript可能会调用一些使用AJAX来加载视图其余部分的函数。
我希望jQuery在步骤8之后做一些事情,当一切都已完成加载时。
有谁知道怎么做/检测这个?
答案 0 :(得分:5)
首先,你可以向谷歌大吼大叫,修复他们的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.');
}