js实用方法记录-js动态加载css、js脚本文件

js实用方法记录-动态加载css/js

附送一个加载iframe,h5打开app代码

1. 动态加载js文件到head标签并执行回调

方法调用:dynamicLoadJs('http://www.yimo.link/static/js/main.min.js',function(){alert('加载成功')});

    /**
     * 动态加载JS
     * @param {string} url 脚本地址
     * @param {function} callback  回调函数
     */
    function dynamicLoadJs(url, callback) {
        var head = document.getElementsByTagName('head')[0];
        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;
                }
            };
        }
        head.appendChild(script);
    }

2. 动态加载css文件到head

方法调用: dynamicLoadCss('http://www.yimo.link/static/css/style.css')

    /**
     * 动态加载CSS
     * @param {string} url 样式地址
     */
    function dynamicLoadCss(url) {
        var head = document.getElementsByTagName('head')[0];
        var link = document.createElement('link');
        link.type='text/css';
        link.rel = 'stylesheet';
        link.href = url;
        head.appendChild(link);
    }

3. 动态加载脚本文件

参考:http://www.cnblogs.com/yuanke/p/5039699.html

    /**
     * 动态加载css脚本
     * @param {string} cssText css样式
     */
    function loadStyleString(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;
        }
        document.getElementsByTagName("head")[0].appendChild(style);
    }
    // 测试
    var css = "body{color:blue;}";
    loadStyleString(css);
    /**
     * 动态加载js脚本
     * @param {string} code js脚本
     */
    function loadScriptString(code) {
        var script = document.createElement("script");
        script.type = "text/javascript";
        try{
            // firefox、safari、chrome和Opera
            script.appendChild(document.createTextNode(code));
        }catch(ex) {
            // IE早期的浏览器 ,需要使用script的text属性来指定javascript代码。
            script.text = code;
        }
        document.getElementsByTagName("head")[0].appendChild(script);
    }
    // 测试
    var text = "function test(){alert('test');}";
    loadScriptString(text);
    test();

4. 动态加载iframe到body标签并执行回调

方法调用:dynamicLoadIframe('http://www.yimo.link',function(){alert('加载成功')},'');

  /**
   * 动态加载Iframe
   * @param {string} url 脚本地址
   * @param {function} callback  回调函数
   * @param {string} style  加载样式
   */
  function dynamicLoadIframe(url,callback,style) {
    var body = document.getElementsByTagName('body')[0];
    var iframe = document.createElement('iframe');
    iframe.src = url;
    iframe.style=style||'display:none;width:0px;height:0px;';
    if(typeof(callback)=='function'){
        iframe.onload = iframe.onreadystatechange = function () {
            if (!this.readyState || this.readyState === "loaded" || this.readyState === "complete") {
                callback();
                iframe.onload = iframe.onreadystatechange = null;
            }
        };
    }
    body.appendChild(iframe);
  }

5. M站中下载/打开app

方法测试:openApp('ios页面','**.apk','metools://home');

function openApp(iosDownUrl,andDownUrl,appUrl) {
    var ua = navigator.userAgent.toLowerCase();    
    if (/iphone|ipad|ipod/.test(ua)) {//ios跳转到store
      window.location.href = iosDownUrl;
      return;
    } 
    if(ua.indexOf("micromessenger") > -1){//微信中不能打开其他app
      window.location.href = andDownUrl;
      return;
    }
    if (/android/.test(ua)) {//安卓手机尝试调用app
      if(!appUrl){
        console.log('未指定需要打开的App,可参考http://www.oschina.net/code/snippet_256033_35330/');
        return;
      }
      var su = appUrl;//"metools://index";//自定义协议
      var n = setTimeout(function () {
        window.location.href = andDownUrl
      }, 500);
      var r = document.createElement("iframe");
      r.src = su;
      r.onload = function () {
        console.log('iframe load')
        clearTimeout(n);
        r.parentNode.removeChild(r);
        window.location.href = su;
      };
      r.setAttribute("style", "display:none;");
      document.body.appendChild(r);
      return;
    }
    window.location.href = andDownUrl;
  }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏天天

Ajax(20171101)

与 POST 相比,GET 更简单也更快,并且在大部分情况下都能用。 然而,在以下情况中,请使用 POST 请求: a)无法使用缓存文件(更新服务器上的文件或数...

732
来自专栏Django Scrapy

Django安装及简单使用1.5

Django安装及简单使用1.5 代码都在github: URL:https://github.com/njxshr/codes/tree/master/t...

3327
来自专栏前端架构与工程

【翻译】浏览器渲染Rendering那些事:repaint、reflow/relayout、restyle

原文链接:http://www.phpied.com/rendering-repaint-reflowrelayout-restyle/ 有没有被标题中的5个“...

2196
来自专栏极乐技术社区

微信小程序那点事:特性总结

一、微信小程序运行环境 1、完全封闭的环境不等于浏览器环境 2、WXML/WXSS/JS格式 3、WXML 不等于 HTML 4、WX...

2076
来自专栏BestSDK

年薪30万的前端面试题,你能答对几道?|附答案

HTML面试题 1.XHTML和HTML有什么区别 HTML是一种基本的WEB网页设计语言,XHTML是一个基于XML的置标语言 最主要的不同: XHTML 元...

4146
来自专栏Youngxj

41个Web开发者都收藏的实用代码

2243
来自专栏对角另一面

读Zepto源码之Fx模块

fx 模块为利用 CSS3 的过渡和动画的属性为 Zepto 提供了动画的功能,在 fx 模块中,只做了事件和样式浏览器前缀的补全,没有做太多的兼容。对于不支持...

3250
来自专栏Google Dart

AngularDart Material Design 列表 顶

它构成了选择和菜单组件的基础。 MaterialListComponent类充当提供样式和收集项事件的能力的列表的根节点。

1092
来自专栏技术博客

JavaScript 处理Iframe自适应高度的问题

 用到的就是iframe嵌套的页面加载完毕的时候,运用onload事件来获取嵌套在iframe中网页的高度,然后赋值给Iframe的高度即可。

3092
来自专栏Nian糕的私人厨房

WeChat 文章列表页面(二)

本次的系列博文的知识点讲解和代码,主要是来自于 七月老师 的书籍《微信小程序开发:入门与实践》,由个人总结并编写,关于更多微信小程序开发中的各项技能,以及常见问...

1324

扫码关注云+社区