gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 22:41:03 24 4
gpt4 key购买 nike

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

这基本上是发生的事情:

  1. 我刷新 Gmail
  2. 加载窗口启动
  3. GM 脚本在加载窗口期间启动 3 次
  4. 加载窗口中的某些内容发生变化
  5. GM 脚本再次启动
  6. 页面发生变化
  7. GM脚本最后一次启动
  8. Gmail View 加载并完成

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

我希望 jQuery 在第 8 步之后(当所有内容都完成加载后)执行一些操作。

有人知道如何做到/检测这个吗?

最佳答案

首先,您可以向 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.');
}

关于jquery - 使用 jQuery 和 GreaseMonkey 检测 Gmail 何时完成加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3472003/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com