博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
js实用方法记录-js动态加载css、js脚本文件
阅读量:6292 次
发布时间:2019-06-22

本文共 4850 字,大约阅读时间需要 16 分钟。

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

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

方法调用:dynamicLoadJs('',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('',function(){alert('加载成功')})

/**     * 动态加载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.动态加载脚本文件

参考:

/**     * 动态加载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('',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;      }

6.query参数转换

参考:
query参数转对象

export function query(search) {  let str = search || window.location.search  let objURL = {}  str.replace(new RegExp('([^?=&]+)(=([^&]*))?', 'g'), ($0, $1, $2, $3) => {    objURL[$1] = $3  })  return objURL}

7.使用:query('?v=1')

对象转query参数

function queryString(url, query) {  let str = []  for (let key in query) {    str.push(key + '=' + query[key])  }  let paramStr = str.join('&')  return paramStr ? `${url}?${paramStr}` : url}

转载地址:http://cocta.baihongyu.com/

你可能感兴趣的文章
Android开发 - 掌握ConstraintLayout(九)分组(Group)
查看>>
springboot+logback日志异步数据库
查看>>
Typescript教程之函数
查看>>
Android 高效安全加载图片
查看>>
vue中数组变动不被监测问题
查看>>
3.31
查看>>
类对象定义 二
查看>>
收费视频网站Netflix:用户到底想要“点”什么?
查看>>
MacOS High Sierra 12 13系统转dmg格式
查看>>
关于再次查看已做的多选题状态逻辑问题
查看>>
动态下拉菜单,非hover
查看>>
政府安全资讯精选 2017年第十六期 工信部发布关于规范互联网信息服务使用域名的通知;俄罗斯拟建立备用DNS;Google打击安卓应用在未经同意情况下收集个人信...
查看>>
简单易懂的谈谈 javascript 中的继承
查看>>
iOS汇编基础(四)指针和macho文件
查看>>
Laravel 技巧锦集
查看>>
Android 使用 ViewPager+RecyclerView+SmartRefreshLayout 实现顶部图片下拉视差效果
查看>>
Flutter之基础Widget
查看>>
写给0-3岁产品经理的12封信(第08篇)——产品运营能力
查看>>
ArcGIS Engine 符号自动化配置工具实现
查看>>
小程序 · 跳转带参数写法,兼容url的出错
查看>>