通过html标签数据属性动态加载js、css文件
Dynamically loading js, css files by html tag data attributes
我们可以实现动态加载,对js、css等文件进行处理吗?
通过从html标签数据属性中获取所有需要的信息(我们必须加载什么)?
例如:
<html>
<head>
<title>Our app</title>
</head>
<body data-load-css="style">
<div class="all" data-load-js="jquery|jqueryui" data-load-js-type="async">
<div class="header" data-load-js="main">
Header
</div>
<div class="body" data-load-js="body">
Body
<div class="some-tipsy" data-load-css="tipsy"></div>
</div>
<div class="footer" data-load-js="other">
Footer
<div class="some-other" data-load-css="other"></div>
</div>
</div>
<script>
// our js app to load dynamically js, css
</script>
</body>
</html>
所以,也许你们有一些想法,如何做到最好?具有最佳性能和灵活性。
或者我只需要使用require-js,就不用担心一些"新东西"了?如果只是需要js,那么如何最好地使用这个js插件?以最动态的方式加载所有内容?
如何解决js-async、延迟提交的问题?其中某些脚本必须按特定顺序加载。
以下是我对当前问题的第二个版本:https://stackoverflow.com/questions/34413940/dynamically-load-js-files-by-html-data-attr-dependencies
以下是动态加载脚本的几种方法:
- Javascript:编写一个自定义加载函数
- jQuery:$.getScript()。有关css,请参阅SO Post
- require.js:require(moduleName)
- ECMA 6:导入
以下是一个用于动态加载脚本的纯javascript函数:
function(url, callback) {
var scripts = utils.getLoadedScripts(); // Read all scripts and push names in array.
var lastIndex = url.lastIndexOf("/");
var isLoaded = false;
scripts.forEach(function(row, index) {
if (row == url.substring(lastIndex + 1)) {
isLoaded = true;
return;
}
});
if (!isLoaded) {
//$(".reveal").addClass("loading");
// Adding the script tag to the head as suggested before
var head = document.getElementsByTagName('head')[0];
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = url;
script.name = "url";
// Then bind the event to the callback function.
// There are several events for cross browser compatibility.
script.onreadystatechange = callback;
script.onload = callback;
// Fire the loading
head.appendChild(script);
}
};
您可以在您的案例中使用web workers
。您可以异步处理代码以异步完成任务。
主脚本:
var worker = new Worker('doWork.js');
worker.addEventListener('message', function(e) {
console.log('Worker said: ', e.data);
}, false);
worker.postMessage(); // Starts the worker to work;
doWork.js(工人):
self.addEventListener('message', function(e) {
self.postMessage("Hi, loaded async."); // send the data via postMessage to main script.
}, false);
因此,这意味着您可以将逻辑放入doWork.js
中,并将脚本异步地放到用户的屏幕上。
相关文章:
- JS CSS切换按钮没有'不要向上移动
- 我应该连接/缩小已经缩小的JS/CSS吗?如果是,如何
- JS/CSS:如何在向下滚动超过1200像素(高度)后更改z索引值
- JS/CSS旋转的DIVS在任何屏幕的中间相遇
- 在企业应用程序框架中包含js/css文件的最佳实践是什么
- Html+js+css的打包程序
- 如何使用jquery/js/css逐步突出显示一段文本
- 重叠的选项卡 JS CSS HTML.
- 如何从我的机器提供HTML + JS + CSS网络应用程序,以便其他人可以查看它
- MVC Razor,包括来自另一个项目的JS/CSS文件
- 最轻的js/css,用于向用户提供SPA正在加载/初始化的视觉反馈
- 我们怎么知道消除HTML/JS/CSS文件中的空白可以缩短页面加载时间呢
- 有条件的包含js/css文件的IE与流星
- node.js可以选择性地引入到用普通PHP/js/CSS/HTML构建的web应用程序中吗
- 无法使用我的代码(html/js/css)初始化网络摄像头
- 当使用HTTP/2时,缩小和连接JS/CSS文件,以及使用精灵进行图像处理仍然可以提供性能优势
- JS CSS线夹重置(TextOverflowClamp.JS)
- JS CSS时钟在IE中不工作
- 有没有一个Wordpress插件可以让我展示HTML/JS/CSS的例子
- 使用Meteor为每个模板动态加载JS/CSS