在我的网站上,我有很多内嵌JavaScript代码片段。他们大多需要jQuery和类似的东西。推迟内嵌JavaScript执行?
但我想推迟jquery加载到页面呈现后。这意味着,我的内联JavaScript将执行,在jquery加载之前。有什么我可以做的吗?我正在寻找易于实现的解决方案(我也不能移动我的内联JavaScript,因为它是在为用户准备页面时自动生成的)。
在我的网站上,我有很多内嵌JavaScript代码片段。他们大多需要jQuery和类似的东西。推迟内嵌JavaScript执行?
但我想推迟jquery加载到页面呈现后。这意味着,我的内联JavaScript将执行,在jquery加载之前。有什么我可以做的吗?我正在寻找易于实现的解决方案(我也不能移动我的内联JavaScript,因为它是在为用户准备页面时自动生成的)。
你可以通过设置内嵌脚本以一个不会被浏览器,如text/example
处理的type
,并在文件中type
与text/javascript
更换结束的克隆那些脚本模拟延迟。
用于处理所有text/examples
的代码是非常简单的:
window.addEventListener("load", function() {
var arr = document.querySelectorAll("script[type='text/example']");
for (var x = 0; x < arr.length; x++) {
var cln = arr[x].cloneNode(true);
cln.type = "text/javascript";
document.querySelectorAll("body")[0].appendChild(cln);
}
});
或者如果你喜欢使用jQuery(你必须后添加这个脚本包括jQuery的文件):
$(function() {
$("script[type='text/example']").each(function() {
$(this).clone().attr("type","text/javascript").appendTo("body");
});
});
此代码等待,直到在页面加载,则在body
的与一种类型的结束选择所有与text/example
类型的脚本,并将其复制因此它们正常执行。
例如:
...
<script type="text/example">
console.log("I am before the h1");
</script>
<h1>Page Title</h1>
<script type="text/javascript">
console.log("I am after the h1");
</script>
...
将导致控制台这些消息:
我是H1
我的H1前我后
你可以在此JSFiddle上看到正在运行的演示:http://jsfiddle.net/rqckwc79/
优点的该溶液:
缺点这一解决方案的:
type
。我知道我对此问题迟了一点,但是我看到[other](http://stackoverflow.com/questions/21013554/defer-loading-of-javascript-uncaught-referenceerror-is-not - 定义)[用户](http://stackoverflow.com/questions/27302242/how-to-use-defer-for-inline-javascript)询问相关问题,并在这里提到。只是这样他们有另一个选项,不需要改变页眉/页脚来推迟内联脚本 –
这是推迟JavaScript的一个非常好的解决方案,尤其是以一种对Pagespeed友好的方式。谢谢。通过较旧的IE浏览器,我想你的意思是低于版本8? –
是的。这个解决方案使用'querySelectorAll',它只支持IE的8版本(并且只针对那个特定版本)。我也有一个版本,可以在IE 6和7上运行,但它更复杂(有点_hacky_) –
你能举一个例子说明你的意思吗?实际上是在HTML元素内部吗?或者你的意思是每个人都有自己的'' –