【发布时间】:2011-12-22 19:44:31
【问题描述】:
我使用以下 HTML 标记来加载 Google Maps API:
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
但是,在浏览器加载脚本之前,它会阻止加载 HTML 中位于其下方的所有内容。
有没有办法让这个加载不阻塞?
【问题讨论】:
我使用以下 HTML 标记来加载 Google Maps API:
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
但是,在浏览器加载脚本之前,它会阻止加载 HTML 中位于其下方的所有内容。
有没有办法让这个加载不阻塞?
【问题讨论】:
此代码为您提供了一个 defer 函数,该函数接受一个 url 和一个可选的回调。 它异步加载您的脚本,而不会阻塞页面呈现。 我已经设置了保护,因此它不会两次加载相同的脚本,因此您可以天真地调用它任意多次。
defer = (function () {
var urls = [];
return function (url, callback) {
var inc;
if (url && urls.indexOf(url) === -1) {
inc = document.createElement('script');
inc.async = true;
inc.src = url;
inc.onload = callback || function () {};
document.getElementsByTagName('head')[0].appendChild(inc);
}
}
}());
defer('http://maps.google.com/maps/api/js?sensor=false');
这适用于任何在异步加载时不会失败的外部 javascript。
【讨论】:
是的,您可以异步加载它。查看文档的这一部分: http://code.google.com/apis/maps/documentation/javascript/basics.html#Async
【讨论】: