使用@run-at document-start
指令时遇到问题。我确信这归结为缺乏经验,但对于我的生活,我无法弄清楚这一点。
除了一些其他指令外,这是整个脚本。
// @require https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.js
// @run-at document-start
FF中的错误
Error: document.documentElement is null
Source File: file:///C:/Users/---/Test-1/jquery.js
Line: 4899
我看到并理解了这个问题,我只是不确定要采取哪些措施让我尽可能接近文档启动运行我的脚本,但仍然可以使@required
脚本正常运行。 />
我的第一篇文章有点紧张......请轻松一下:)
Firefox 12
Greasemonkey 0.9.20
答案 0 :(得分:1)
是的,这是使用// @run-at document-start
的缺点。尝试操作DOM的@required
脚本可能会抛出错误。 (但是很多@required
库很好,因为它们只是加载了稍后由代码激活的工具。)
您可以使用@resource
,eval()
和监控readyState
来解决此问题。像这样:
// ==UserScript==
// @name _Using DOM-manipulating libraries with run-at start
// @include http://YOUR_SERVER/YOUR_PATH/*
// @run-at document-start
// @resource jQ_src https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.js
// ==/UserScript==
var jQ_src = GM_getResourceText ("jQ_src");
window.addEventListener ("readystatechange", FireWhenReady, true);
function FireWhenReady () {
this.fired = this.fired || false;
if ( document.readyState != "uninitialized"
&& document.readyState != "loading"
&& ! this.fired
) {
this.fired = true;
eval (jQ_src);
$(document).ready (DoStuff);
}
}
function DoStuff () {
//--- Where this next paragraph appears can give you an idea of the delays involved...
$("body").append ('<p style="background:yellow;">Hello from quick-start jQuery!</p>');
}
重要!对于像jQuery这样的库,使用@run-at document-start
没有太大意义,因为jQuery不会让你做任何事情,直到$(document).ready()
,这是当Greasemonkey默认触发时。
提前加载jQuery什么也不买,因为那时你必须明确使用$(document).ready()
(或the shortcut forms之一)。您可能有其他原因使用@run-at document-start
,然后也想稍后使用jQuery。