Javascript 为什么@require-ing jQuery在带有@run-at-document start的脚本中抛出错误?
我在使用Javascript 为什么@require-ing jQuery在带有@run-at-document start的脚本中抛出错误?,javascript,jquery,dom,greasemonkey,Javascript,Jquery,Dom,Greasemonkey,我在使用@runatdocumentstart指令时遇到问题。我相信这是因为缺乏经验,但就我个人而言,我无法理解这一点 保存一些其他指令这是整个脚本 // @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:///
@runatdocumentstart
指令时遇到问题。我相信这是因为缺乏经验,但就我个人而言,我无法理解这一点
保存一些其他指令这是整个脚本
// @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
我看到并理解了这个问题,我只是不知道应该采取什么步骤来让我的脚本尽可能靠近文档开始运行,但仍然有@必需的脚本正常运行。
对我的第一篇帖子有点紧张。。。请放轻松:)
Firefox 12
Greasemonkey 0.9.20是的,这是使用/@run-at-document start
的一个缺点@required
试图操作DOM的脚本可能会抛出错误。(但许多@required
库是可以的,因为它们只加载稍后由代码激活的工具)
您可以通过使用@resource
,eval()
,以及监视readyState
来解决此问题。像这样:
/==UserScript==
//@name\u使用DOM操作库并在开始时运行
//@包括http://YOUR_SERVER/YOUR_PATH/*
//@在文档开始时运行
//@resource jQ_srchttps://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.js
//==/UserScript==
var jQ_src=GM_getResourceText(“jQ_src”);
window.addEventListener(“readystatechange”,FireshenReady,true);
函数FireWhenReady(){
this.fired=this.fired | | false;
如果(document.readyState!=“未初始化”
&&document.readyState!=“正在加载”
&&!这个,被解雇了
) {
this.fired=true;
评估(jQ_src);
美元(文件)。准备就绪(DoStuff);
}
}
函数DoStuff(){
//---在下一段出现的地方,可以让您了解所涉及的延迟。。。
$(“body”).append(“Hello from quick start jQuery!
”);
}
重要对于像jQuery这样的库,使用@run at document start
没有多大意义,因为jQuery在$(document).ready()
之前不会让您做任何事情,默认情况下这是Greasemonkey启动的时候
提前加载jQuery不会给您带来任何好处,因为那时您必须显式地使用$(document).ready()
(或其中一个)。您可能有其他原因使用@runatdocumentstart
,然后可能还想稍后使用jQuery。谢谢您的快速回答,该代码将真正帮助我。我要说的是,我没有调用jQuery,只是OP中的行导致了错误。你的理由是正确的,虽然它们是装饰性的,一个屏幕宽的横幅,我似乎无法隐藏而不引起“闪烁”,或者在我的例子中,一个相当不和谐的屏幕跳跃。再次感谢!不客气。为了摆脱“宽屏横幅”,如果不能使用核武器,机会是可以的。对于这类事情,它们都比Greasemonkey更有效,并且不会引起闪烁。Adblock还将释放带宽并加速页面(不允许下载广告)。