JavaScript 动态加载脚本和样式的方法


Posted in Javascript onApril 13, 2015

一 动态脚本

当网站需求变大,脚本的需求也逐步变大;我们不得不引入太多的JS脚本而降低了整站的性能;
所以就出现了动态脚本的概念,在适时的时候加载相应的脚本;

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')}");

二 动态样式

为了动态的加载样式表,比如切换网站皮肤;
样式有两种方式进行加载,一种是<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 相关文章推荐
JavaScript调用Activex控件的事件的实现方法
Apr 11 Javascript
JS注册/移除事件处理程序(ExtJS应用程序设计实战)
May 07 Javascript
刷新页面的几种方法小结(JS,ASP.NET)
Jan 07 Javascript
jquery选择器需要注意的问题
Nov 26 Javascript
javascript实现鼠标拖动改变层大小的方法
Apr 30 Javascript
基于jquery实现表格内容筛选功能实例解析
May 09 Javascript
JavaScript中判断数据类型的方法总结
May 24 Javascript
浅谈html转义及防止javascript注入攻击的方法
Dec 04 Javascript
jQuery实现对象转为url参数的方法
Jan 11 Javascript
基于JavaScript实现屏幕滚动效果
Jan 18 Javascript
iview给radio按钮组件加点击事件的实例
Sep 30 Javascript
vue实现多条件和模糊搜索功能
May 28 Javascript
JavaScript DOM元素尺寸和位置
Apr 13 #Javascript
JavaScript DOM操作表格及样式
Apr 13 #Javascript
JavaScript DOM进阶方法
Apr 13 #Javascript
JavaScript DOM基础
Apr 13 #Javascript
JavaScript 浏览器对象模型BOM使用介绍
Apr 13 #Javascript
JavaScript 匿名函数和闭包介绍
Apr 13 #Javascript
jfreechart插件将数据展示成饼状图、柱状图和折线图
Apr 13 #Javascript
You might like
摩卡咖啡
2021/03/03 咖啡文化
php生成图形(Libchart)实例
2013/11/06 PHP
浅谈PHP变量作用域以及地址引用问题
2013/12/27 PHP
PHP命令行脚本接收传入参数的三种方式
2014/08/20 PHP
PHP中的闭包(匿名函数)浅析
2015/02/07 PHP
XMLHTTPRequest的属性和方法简介
2010/11/23 Javascript
这些年、我收集的JQuery代码小结
2012/08/01 Javascript
浏览器窗口大小变化时使用resize事件对框架不起作用的解决方法
2014/05/11 Javascript
javascript实现点击按钮弹出一个可关闭层窗口同时网页背景变灰的方法
2015/05/13 Javascript
简单实现jQuery上传图片显示预览功能
2020/06/29 jQuery
node.js通过axios实现网络请求的方法
2018/03/05 Javascript
如何利用@angular/cli V6.0直接开发PWA应用详解
2018/05/06 Javascript
vue.js 实现点击展开收起动画效果
2018/07/07 Javascript
详解Vue取消eslint语法限制
2018/08/04 Javascript
node版本管理工具n包使用教程详解
2018/11/09 Javascript
详解vue中this.$emit()的返回值是什么
2019/04/07 Javascript
微信小程序实现注册登录功能(表单校验、错误提示)
2019/12/10 Javascript
jenkins自动构建发布vue项目的方法步骤
2021/01/04 Vue.js
[56:46]Liquid vs IG 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
python将多个文本文件合并为一个文本的代码(便于搜索)
2011/03/13 Python
Python3实现从指定路径查找文件的方法
2015/05/22 Python
Python编程中对super函数的正确理解和用法解析
2016/07/02 Python
python多进程使用函数封装实例
2020/05/02 Python
Python通过yagmail实现发送邮件代码解析
2020/10/27 Python
pycharm 的Structure界面设置操作
2021/02/05 Python
css3学习之2D转换功能详解
2016/12/23 HTML / CSS
美国知名男士服饰品牌:Brooks Brothers(布克兄弟)
2016/08/25 全球购物
Subside Sports德国:足球球衣和球迷商品
2019/06/08 全球购物
开普敦通行证:Cape Town Pass
2019/07/18 全球购物
什么是托管函数?托管函数有什么用?
2014/06/15 面试题
自我评价怎么写正确呢?
2013/12/02 职场文书
安全教育感言
2014/03/04 职场文书
廉洁教育学习材料
2014/05/19 职场文书
文明和谐家庭事迹材料(2016精选版)
2016/02/29 职场文书
2019年汽车租赁合同范本!
2019/08/12 职场文书
Windows下载并安装MySQL8.0.x 版本的完整教程
2022/04/10 MySQL