如何仅在尚未包含Javascript和css文件的情况下才包含它们
How can you include Javascript and css files only in the case that they are not already included?
我有一个大型的遗留web应用程序。我在其中添加了一些JavaScript,它依赖于一些js文件和一个css文件。这些文件可能已经包含在我添加新JavaScript的页面上。
有没有一种方法可以将这些Javascript和css文件包含到一个页面中,只有在它们还没有添加的情况下?
检查库是否存在,如果不存在则加载和必需:
if (!window.jQuery) {
var script = document.createElement("script");
script.type = "text/javascript";
script.src = "jquery-1.7.min.js";
document.getElementsByTagName('HEAD')[0].appendChild(script);
}
...
您可以编写Javascript来分别搜索JS和CSS的脚本标记和链接标记。如果找不到,可以将标记插入HTML中。
如何插入标记:我可以通过jQuery创建脚本标记吗?
当然。查看document.createElement
,然后相应地设置它们的属性。
您有几个选项:
JavaScript
检查特定方法是否未定义,然后将脚本附加到head
。
if (typeof method === 'undefined') {
var script = document.createElement('script'),
head = document.getElementsByTagName('head')[0];
script.type = 'text/javascript';
script.src = 'path/to/js/file.js';
head.appendChild(script);
}
或者,您可以循环遍历每个script
元素,以检查src
是否等于您需要添加的内容:
使用Mozilla的indexOf
扩展名在sourceArr
中搜索要包含的JS文件的src
。
if (!Array.prototype.indexOf) {
Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {
"use strict";
if (this == null) {
throw new TypeError();
}
var t = Object(this);
var len = t.length >>> 0;
if (len === 0) {
return -1;
}
var n = 0;
if (arguments.length > 0) {
n = Number(arguments[1]);
if (n != n) { // shortcut for verifying if it's NaN
n = 0;
} else if (n != 0 && n != Infinity && n != -Infinity) {
n = (n > 0 || -1) * Math.floor(Math.abs(n));
}
}
if (n >= len) {
return -1;
}
var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);
for (; k < len; k++) {
if (k in t && t[k] === searchElement) {
return k;
}
}
return -1;
}
}
要使用它,请执行以下操作:
var scripts = document.getElementsByTagName('script'),
sourceArr = [],
i = 0;
for (i = scripts.length; i--;) {
var source = scripts[i].src;
sourceArr.push(source);
}
if (sourceArr.indexOf('path/to/js/file.js') === -1) {
var script = document.createElement('script'),
head = document.getElementsByTagName('head')[0];
script.type = 'text/javascript';
script.src = 'path/to/js/file.js';
head.appendChild(script);
}
您也可以使用上面的CSS文件。只需循环遍历每个link
元素并设置cssFile.type = 'text/css'
并添加cssFile.rel = 'stylesheet'
。
相关文章:
- 在不破坏未定义函数的情况下,对多个视图使用单个js文件
- 如何在不在本地下载的情况下将url中提供的文件(pdf/doc)转换为json/string/base64格式
- 在给定 javascript 中的表头的情况下生成 TSV 文件
- 如何在不使用require语句的情况下使用webpack加载目录中的所有文件
- 获取 HTML 5 音频控制文件位置并在不使用 id 选择器的情况下更新 src
- 如何在不使用Internet Explorer的情况下从未挂起的HTML文件执行程序
- AngularJS可以在没有任何服务器端技术的情况下将文件保存/写入服务器
- 如何使用javascript在不更改页面的情况下访问文件上传所选文件
- 如何在不使用处理程序的情况下使用ajax将文件从客户端发送到服务器端
- 如何在不必维护每个文件的两个版本的情况下,将通用JavaScript和映像部署到两个不同的EAR
- 如何在不干扰电子邮件通知的情况下将眼镜保存在文本文件中
- 在不干扰HTML代码的情况下,将javascript文件导入javascript文件
- 如何在没有JQuery的情况下在Javascript中获取文件的内容
- 如何在不使用任何 html 输入/搜索元素的情况下读取本地客户端文本文件
- 如何使用 dojo 在不冻结浏览器的情况下下载文件
- 如何在没有冲突的情况下将 JQuery 包含在 JavaScript 文件中
- 是否可以在不将其添加到DOM的情况下预加载和缓存视频文件
- 如何在不打开文件的情况下下载文件
- 在不安装Zend优化器的情况下运行php文件
- PhantomJS-在不提交表单的情况下上传文件