当前位置: 首页 > news >正文

原生JS动态加载JS、CSS文件及代码脚本

DOM readyState属性共5中状态

  1. uninitialized:初始状态
  2. loading:document加载中
  3. loaded: document加载完成
  4. interactive:已加载并可与用户交互,但还需要加载图片等其他资源
  5. complete:全部资源加载完成

DOM文档加载顺序:

  1. 解析HTML结构
  2. 加载外部脚本和样式表文件(loading)
  3. 解析并执行脚本
  4. DOM树构建完成(readyState:interactive)
  5. 加载外部资源文件(图片等)
  6. 页面加载完成(readyState:complete)

动态加载公共方法

var DynamciLoadUtil = {
    // 动态加载外部js文件,并执行回调
    loadJS: function(url, callback){
        var script = document.createElement('script');
        script.type = 'text/javascript';
        script.src = url;
        if(typeof callback == 'function'){
            script.onload = script.onreadystatechange = function(){
                if(!this.readyState || this.readyState == 'loaded'
                                    || this.readyState == 'complete'){
                    callback();
                    script.onload = script.onreadystatechange = null;
                }
            }
        }
        document.body.appendChild(script);
        //document.getElementsByTagName('body')[0].appendChild(script);
    },
    // 行内方式动态加载js代码
    loadJSText: function(jsText){
        var script = document.createElement('script');
        script.type = 'text/javascript';
        try {
            // Firefox,Safari,Chrome,Opera支持
            script.appendChild(document.createTextNode(jsText));
        } catch(ex){
            // IE早期的浏览器,需要使用script的text属性来指定js代码
            script.text = jsText;
        }
        document.body.appendChild(script);
    },
    // 动态加载外部CSS文件
    loadCSS:function(url){
        var link = document.createElement('link');
        link.rel = 'stylesheet';
        link.type = 'text/css';
        link.url = url;
        document.getElementsByTagName('head')[0].appendChild(link);
    },
    // 使用<style>标签包含嵌入式CSS
    loadCSSText: function(cssText){
        var style = document.createElement('style');
        style.type = 'text/css';
        try{
            // Firefox,Safari,Chrome,Opera支持
            style.appendChild(document.createTextNode(cssText));
        } catch(ex){
            // IE早期浏览器,需要使用style元素的styleSheet属性的cssText属性
            style.styleSheet.cssText = cssText;
        }
    }
}

相关文章:

  • 2-快速填充单元格
  • Linux学习笔记之文件系统
  • 所谓死锁
  • Linux下函数调用堆栈帧的详细解释【转】
  • Array.some()方法
  • python浏览器自动化测试库【2018/7/22-更新】
  • 工作踩坑系列——https访问遇到“已阻止载入混合活动内容”
  • 剥开比原看代码12:比原是如何通过/create-account-receiver创建地址的?
  • ubuntu 出错 /etc/sudoers is world writable
  • J2ee分布式架构 dubbo + springmvc + mybatis + ehcache + redis 技术介绍
  • RabbitMQ系列(五)使用Docker部署RabbitMQ集群
  • 小程序获取用户头像大图 小程序获取用户头像模糊的问题 小程序自定义转发头像模糊 小程序自定义转发分享大图...
  • mysql---表操作之创建表
  • redux-form V.7.4.2学习笔记(六)表单同步校验技术
  • 如何使用Helm更新使用ConfigMap的应用程序
  • [译]CSS 居中(Center)方法大合集
  • 【附node操作实例】redis简明入门系列—字符串类型
  • android图片蒙层
  • Angular数据绑定机制
  • EOS是什么
  • exif信息对照
  • spring学习第二天
  • Web Storage相关
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • 更好理解的面向对象的Javascript 1 —— 动态类型和多态
  • 聊一聊前端的监控
  • 实战:基于Spring Boot快速开发RESTful风格API接口
  • 微服务核心架构梳理
  • 无服务器化是企业 IT 架构的未来吗?
  • 限制Java线程池运行线程以及等待线程数量的策略
  • 小程序开发之路(一)
  • 移动端 h5开发相关内容总结(三)
  • 在Unity中实现一个简单的消息管理器
  • Linux权限管理(week1_day5)--技术流ken
  • 交换综合实验一
  • ​Java并发新构件之Exchanger
  • ​ubuntu下安装kvm虚拟机
  • #define用法
  • #大学#套接字
  • %3cli%3e连接html页面,html+canvas实现屏幕截取
  • (+3)1.3敏捷宣言与敏捷过程的特点
  • (pt可视化)利用torch的make_grid进行张量可视化
  • (阿里云万网)-域名注册购买实名流程
  • (算法设计与分析)第一章算法概述-习题
  • (转)Scala的“=”符号简介
  • .net refrector
  • .Net Remoting(分离服务程序实现) - Part.3
  • .NET/MSBuild 中的发布路径在哪里呢?如何在扩展编译的时候修改发布路径中的文件呢?
  • .net打印*三角形
  • .NET企业级应用架构设计系列之开场白
  • .net使用excel的cells对象没有value方法——学习.net的Excel工作表问题
  • .Net小白的大学四年,内含面经
  • /usr/bin/env: node: No such file or directory
  • [.net] 如何在mail的加入正文显示图片
  • [20190401]关于semtimedop函数调用.txt