如何识别已加载JavaScript文件
我有以下问题: 我的站点正在head部分加载jQuery。它有“async”标志,所以它是异步加载的。 我已经使用jQuery编写了一些函数来处理内容 当我在jQuery文件的末尾实现这个函数时,有时候jQuery会在整个网站DOM之前加载。这意味着我的函数找不到特殊元素,什么也不做。 如果我在HTML文件的末尾实现这个功能,当DOM已经加载时,正好网页完成了,而jQuery没有。然后我得到一个错误,jQuery引用没有定义 有人知道我如何解决这个难题吗?加载DOM和JS文件后,异步加载JS并调用函数 谢谢, 延斯使用 或者,您也可以这样写,这不是最佳实践:如何识别已加载JavaScript文件,javascript,jquery,html,dom,Javascript,Jquery,Html,Dom,我有以下问题: 我的站点正在head部分加载jQuery。它有“async”标志,所以它是异步加载的。 我已经使用jQuery编写了一些函数来处理内容 当我在jQuery文件的末尾实现这个函数时,有时候jQuery会在整个网站DOM之前加载。这意味着我的函数找不到特殊元素,什么也不做。 如果我在HTML文件的末尾实现这个功能,当DOM已经加载时,正好网页完成了,而jQuery没有。然后我得到一个错误,jQuery引用没有定义 有人知道我如何解决这个难题吗?加载DOM和JS文件后,异步加载JS并调
var checkforjquery = setInterval(function() {
if (window.jQuery) {
clearInterval(checkforjquery);
// all your jquery functions
}
}, 100);
将所有javascript放在页面的末尾,首先是jQuery。大概是这样的:
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script> <!-- jQuery -->
<script src="script.js"></script> <!-- your code -->
</body>
</html>
您可以使用库。在head
元素中包含(同步)depend.js文件,将jquery代码封装在
Library(
"jquery",
function(){
//The jQuery itself goes here
});
并通过以下方式包装每个需要jQuery的脚本:
Script(
"any-name",
["jquery"],
function(){
//The script body
});
您甚至可以将其用于您的库。如果一个库依赖于另一个库,只需使用库(“mylib”,“dependency1”,“dependency2”,f)
,其中f
是库体
希望有帮助。这并不难,也不需要像其他答案所建议的那样需要额外的库或轮询 脚本标记(包括标记为
async
的标记)支持在加载时调用onload()
函数,而jQuery在加载DOM时具有$(document).ready()方法。你需要两个都等。因此:
<script async src='jquery.js' onload='jqueryloaded()'></script>
<script>
function jqueryloaded() {
$(document).ready(function () {
// all your code
});
}
</script>
函数jqueryloaded(){
$(文档).ready(函数(){
//你所有的代码
});
}
不异步加载jQuery?使您的其他
脚本
标记也异步?“当我在jQuery文件末尾实现这个函数时,有时候jQuery会在整个网站DOM之前加载。”我甚至不会问为什么要将代码添加到jQuery文件中。但是,我希望您了解ready
处理程序,它在加载DOM后立即执行代码:这不都是关于jQuery$(document).ready()?@fallenPhantasm的吗?这不是它的目的,因为如果不加载jQuery,$
甚至不可用;Require.js非常流行,但也有其他的,简而言之,这个“问题”已经解决了,嗯。当jQuery尚未加载时,您不能使用$(窗口).load()
或$(文档).ready()
。这就是我添加间隔函数的原因。您的答案显示,您可以做第一件事或第二件事。如果你想要一些不同的东西,那么请编辑你的问题来澄清。你应该把它放在正文中,仍然:)我认为OP的问题是如何解决异步加载jQuery时的问题,而不是如何使jQuery不异步加载。这仍然是有效的HTML吗?我真的不这么认为。干杯,亚历克斯,你说得对。我在上面把它修好了。非常感谢你的提示!我用你说的方法实现了它,但是我得到了一个错误,'jqueryloaded'没有定义。加载jQuery是否可能比加载整个HTML文件和调用此函数更快?或者你还有其他建议吗?嗯。。。如果jquery已经被缓存,这是可能的,尽管我仍然希望它在运行之前解析页面。async
功能在不同浏览器中不一致。但是为了得到那个错误,我会仔细检查你的代码是否有拼写错误。这是实现jQuery的代码:“”。我看到safari操作了异步,查看html源代码,我得到了“async=”“”。我使用bhamlin的解决方案解决了这个问题。但是我换了订单。首先取消声明函数,然后使用onload事件。这很好,我没有任何问题。谢谢