JavaScript 动态加载脚本与样式表的实现方案
作者:微光时间:2026-10-29 08:28:19浏览:107
本文介绍在JavaScript中动态加载外部脚本和样式表的技术。通过创建script标签并设置src属性,可实现按需引入JS文件;通过操作DOM插入script节点或设置text属性,可执行内联JS代码。对于CSS,可通过创建link标签引入外部样式,或创建style节点并插入规则来实现动态样式切换,从而优化页面性能并支持皮肤切换等功能。
动态加载脚本
一 动态脚本
随着网站功能需求的增加,引入的JavaScript脚本数量也会随之增长,这可能导致整体网站性能下降。为了解决这一问题,动态脚本加载技术应运而生,其核心思想是在需要时才加载相应的脚本文件。
1.动态引入js文件
var flag = true;
if(flag){
loadScript('browserdetect.js'); // 调用函数,引入路径;
}
function loadScript(url){
var script = document.createElement('script'); // 创建script标签;
script.type = 'text/javascript'; // 设置type属性;
script.src = url; // 引入url;
document.getElementsByTagName('head')[0].appendChild(script); // 将script引入<head>中;
}
2.动态执行js代码
var script = document.createElement('script');
script.type = 'text/javascript';
var text = document.createTextNode("alert('Lee')"); // 设置script标签内容;IE会报错;
script.appendChild(text);
document.getElementsByTagName('head')[0].appendChild(script);
// PS:IE浏览器认为script是特殊元素,不能再访问子节点;
// 为了兼容,可以使用text属性来代替;
function loadScriptString(code){
var script = document.createElement("script");
script.type = "text/javascript";
try{
// IE浏览器认为script是特殊元素,不能再访问子节点;报错;
script.appendChild(document.createTextNode(code)); // W3C方式;
}catch(ex){
script.text = code; // IE方式;
}
document.body.appendChild(script);
}
// 调用;
loadScriptString("function sayHi(){alert('hi')}");
动态加载样式
二 动态样式
为了实现网站皮肤的动态切换,需要动态加载样式表。CSS样式的动态加载主要有两种方式:一是通过<link>标签引入外部样式文件,二是通过<style>标签直接插入样式代码。
1.动态引入link文件
var flag = true;
if(flag){
loadStyles('basic.css'); // 调用函数,引入路径;
}
function loadStyles(url){
var link = document.createElement('link');
link.rel = 'stylesheet';
link.type = 'text/css';
link.href = url;
document.getElementsByTagName('head')[0].appendChild(link);
}
2.动态执行style代码
var flag = true;
if(flag){
var style = docuemnt.createElement('style');
style.type = 'text/css';
document.getElementsByTagName('head')[0].appendChild(style);
insertRule(document.styleSheets[0],'#box','background:red',0);
}
function insertRule(sheet,selectorText,cssText,position){
// 如果是非IE;
if(sheet.insertRule){
sheet.insertRule(selectorText+"{"+cssText+"}",position);
// 如果是IE;
}else if(sheet.addRule){
sheet.addRule(selectorText,cssText,position);
}
}
// 动态执行style2
function loadStyleString(css){
var style = document.createElement("style");
style.type = "text/css";
try{
// IE会报错;不允许向<style>元素添加子节点;
style.appendChild(document.createTextNode(css));
}catch(ex){
// 此时,访问元素的StyleSheet属性,该属性有有一个cssText属性,可以接受CSS代码;
style.styleSheet.cssText = css;
}
var head = document.getElementsByTagName("head")[0];
head.appendChild(style);
}
// 调用;
loadStyleString("body {background-color:red}");
作者最新文章
JavaScript零基础入门:从环境搭建到运行第一段代码
2026-11-05 15:29:58
HTML链接中javascript:void(0)的作用及现代替代方案
2026-11-05 10:07:47
在线调试 JS 时怎么引入 jQuery 或 Vue 等第三方库
2026-11-05 08:53:56
原生JavaScript实现简易颜色选择器原理与代码
2026-11-03 23:22:19
JS原生表单序列化:FormData与URLSearchParams用法详解
2026-11-03 23:13:21
