如何防止创建重复的脚本元素
How to prevent creating duplicate script elements?
我正在使用谷歌地图,我正在使用他们的异步加载。
我使用的函数是:
ready = function() {
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = 'https://maps.googleapis.com/maps/api/js?v=3.exp&' + 'libraries=places&'+'callback=initialize';
document.body.appendChild(script);
};
和我使用这个在我的地图的页面:
$.getScript('/assets/jsFile.js' ,function(){
$(document).ready(ready);
$(document).on('page:load', ready);
});
所以,当我第一次访问页面时,一切都很顺利,但在第二次访问它之后,脚本元素被重新创建,我面临这个错误:
您已经在此页面上多次包含了Google Maps API。这可能会导致意外错误。
如何防止分配给ready
的函数创建重复项?
要使代码只运行一次,您可以使用一个变量来检查它是否已经运行过:
var readyExecuted = false;
function ready() {
if (!readyExecuted) {
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = 'https://maps.googleapis.com/maps/api/js?v=3.exp&' + 'libraries=places&'+'callback=initialize';
document.body.appendChild(script);
readyExecuted = true;
}
};
我认为,而不是$.getScript...
你想做的是调用该脚本在你的html模板,然后询问是否页面已加载-考虑使用$when()...
来做到这一点。如果你有多个资产要加载,并且你想在它们加载后才调用,考虑使用多个延迟对象和$when()...
// as examples
var windowLoadDeferred = windowLoaded(); // this would return a deferred object
var imagesDeferred = loadImages(); // as would this
$.when( windowLoadDeferred, imagesDeferred ).done( function( loaded, images ) {
console.log("The deferred objects have been resolved!");
init(images); // ...or whatever call suits your needs
});
相关文章:
- 浏览器是否持久缓存脚本元素的编译版本
- 我的Javascript没有'当我把一个脚本元素放在头上从URL加载它时,它不起作用
- 如何将脚本元素从 iframe 内部复制到父元素
- 为什么通过 DOMParser 创建的脚本元素不执行
- 无法将脚本元素附加到标题
- 任意运行时脚本元素和 DOM 元素之间的连接
- 如何在 iframe for jQuery 中添加脚本元素
- 删除脚本元素后,脚本仍会运行
- 脚本元素不包含文件,在 FIrebug 中为空
- 将脚本元素添加到现有 TWebBrowser 文档中
- 为什么这个javascript不打印出一系列脚本元素
- 将脚本元素插入浏览器操作页无效
- 从将查询字符串转换为符号的html字符串中删除脚本元素
- 通过JavaScript在页眉或HTML中动态包含脚本元素
- 删除脚本元素是否会从内存中删除其函数
- 添加<脚本>元素时,CSS 翻译过渡停止工作
- 如何防止创建重复的脚本元素
- 无法在IE 5怪癖模式下使用JavaScript写入脚本元素
- 当尝试追加子脚本元素由于未授权而失败时抛出什么错误?
- 使用PHP访问DOM的脚本元素