如何判断 jQuery 是不是在页面上运行(即使 jQuery 是 /after/ 检测脚本)
Posted
技术标签:
【中文标题】如何判断 jQuery 是不是在页面上运行(即使 jQuery 是 /after/ 检测脚本)【英文标题】:How to determine if jQuery is running on a page (even if jQuery is /after/ the detection script)如何判断 jQuery 是否在页面上运行(即使 jQuery 是 /after/ 检测脚本) 【发布时间】:2011-03-03 22:31:22 【问题描述】:我正在开发一个可以嵌入到 youtube 视频之类的页面中的 do-dad。我想要的特殊效果需要 jQuery 才能工作。
我想在页面上的某些内容尚未添加 jQuery 的情况下加载 jQuery。
我想测试
if (typeof($)=='function')...
但这只有在页面到达我的脚本时加载并运行 jQuery 才有效。由于这些天的最佳做法是将脚本嵌入到页脚中,因此我的嵌入代码可能大部分时间都不会看到 jQuery。
我想测试onready
而不是onload
,但onready
函数在jQuery 内部。 (我想我可以使用一个独立的脚本?有好的脚本吗?)
最后,我想在超时延迟后测试 jQuery,但这似乎充其量是不优雅的,最坏的情况是不可靠。
有什么想法吗?
【问题讨论】:
"if (typeof($)=='object')...
" 这根本行不通。 typeof $
应该是“函数”,而不是“对象”。我还会检查jQuery
,而不是$
,以防使用noConflict
。 (还要注意typeof
是一个运算符,而不是一个函数;不需要在其操作数周围加上括号,除非它的操作数是一些复杂的表达式……尽管它们几乎没有什么害处。)
@T.J. Crowder:嗯,哎呀,jquery 是 一个函数!现在更改我的帖子...
【参考方案1】:
鉴于您的限制,我只看到两个选项:
使用window.load
事件:
(function()
if (window.addEventListener)
// Standard
window.addEventListener('load', jQueryCheck, false);
else if (window.attachEvent)
// Microsoft
window.attachEvent('onload', jQueryCheck);
function jQueryCheck()
if (typeof jQuery === "undefined")
// No one's loaded it; either load it or do without
)();
window.load
发生在加载周期的后期非常,不过,在所有图像都加载完毕之后。
使用超时。好消息是超时时间可能很短。
(function()
var counter = 0;
doDetect();
function doDetect()
if (typeof jQuery !== "undefined")
// ...jQuery has been loaded
else if (++counter < 5) // 5 or whatever
setTimeout(doDetect, 10);
else
// Time out (and either load it or don't)
)();
您必须进行调整以确定计数器和间隔的最佳值。但是,如果即使在第一个或第二个循环中也没有加载 jQuery,我的猜测(未经测试)是它不会被加载......除非其他人正在做你正在做的事情。 :-)
【讨论】:
【参考方案2】:您可以使用window.onload
。这会在 domReady 之后触发,因此此时肯定会加载 jQuery。
并检查jQuery
,而不是$
。有时人们将 jQuery 与其他库一起使用,并使用 $
来做不同的事情。
但是,恕我直言,如果 jQuery 被加载两次,我认为这没什么大不了的。
【讨论】:
【参考方案3】:我已经使用这段代码来做这件事有一段时间了。它还在加载之前检查 jQuery 的最低版本(在我们的例子中,我们仍然使用 1.4.2):
/* Checks if JQuery is loaded... if not, load it. */
/* Remember to update minimum version number when updating the main jquery.min.js file. */
if (typeof jQuery != 'undefined')
/* jQuery is already loaded... verify minimum version number of 1.4.2 and reload newer if needed */
if (/1\.(0|1|2|3|4)\.(0|1)/.test(jQuery.fn.jquery) || /^1.1/.test(jQuery.fn.jquery) || /^1.2/.test(jQuery.fn.jquery)|| /^1.3/.test(jQuery.fn.jquery))
loadJQ();
else
loadJQ();
/* loads jQuery if not already loaded, or if not a recent enough version */
function loadJQ()
/* adds a link to jQuery to the head, instead of inline, so it validates */
var headElement = document.getElementsByTagName("head")[0];
linkElement=document.createElement("script");
linkElement.src="../scripts/lib/jquery.min.js";
linkElement.type="text/javascript";
headElement.appendChild(linkElement);
【讨论】:
他说“即使jQuery是/after/检测脚本”。然后他在文本中继续讨论它。这显然是他所要求的重要部分。 谢谢...我一定错过了那个细节。以上是关于如何判断 jQuery 是不是在页面上运行(即使 jQuery 是 /after/ 检测脚本)的主要内容,如果未能解决你的问题,请参考以下文章
JS或JQUERY如何判断A页面是从其他页面返回的,而不是首次加载
即使我离开然后使用Jquery返回页面,如何将内容保留在页面上
jquery或者js如何判断当前网络是不是畅通,我的页面是给手机用的