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

这篇具有很好参考价值的文章主要介绍了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. 动态加载脚本文件

参考:动态加载js和css - 猿客 - 博客园


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

query参数转换

参考:https://github.com/nicejade/awesome-vue-cli3-example/blob/master/src/helper/utils.js#L36

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
}

使用: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
}

使用: queryString('http://192.168.1.32:3638/checkout',{abc:123})文章来源地址https://www.toymoban.com/news/detail-545213.html

到了这里,关于js实用方法记录-js动态加载css、js脚本文件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • JavaScript 脚本延迟加载方式

    1. defer属性 用来通知浏览器该脚本将在文档完成解析后,触发 DOMContentLoaded 事件前执行。 有  defer  属性的脚本会阻止  DOMContentLoaded  事件,直到脚本被加载并且解析完成。 defer 属性必须配合 src 属性使用 defer 属性对于模块脚本没有作用 2. async 属性 对于普通脚本,如果存

    2024年02月05日
    浏览(28)
  • 解决js脚本加载失败的问题

    当我们在运行某一个项目时,它的某些JavaScript脚本可能加载不出来,报错。 像现在单页界面应用基本上都是通过js来构建,一旦加载不出,这个项目就不能运行了,那怎么办?我们如何解决这个问题? 这里采用的方案是,重新加载JavaScript脚本。那么什么时候去重新加载js,

    2024年02月09日
    浏览(31)
  • 【CSS加载动画特效】28种纯CSS实现的加载loading动态特效(附源码)

    今天其实还是有点期待6月份城市赛道的成绩公布,但是可能因为出现城市太多等问题,官方也还在快马加鞭的统计中,我也趁机再发一篇前端的文章了,其实在很多系统里面我们都看到过各种各样的加载中样式,但是总有些显得平平无奇,今天我就统计了28种load加载动画特效

    2024年02月15日
    浏览(50)
  • 博客无限滚动加载(html、css、js)实现

    这是一个简单实现了类似博客瀑布流加载功能的页面,使用html、css、js实现。简单易懂,值得学习借鉴。👍 演示地址:https://i_dog.gitee.io/easy-web-projects/infinite_scroll_blog/index.html index.html style.css script.js 该项目从github中的vanillawebprojects仓库收集。 原始代码: 原始代码地址 https

    2024年02月07日
    浏览(30)
  • 安卓手机怎么运行js脚本,手机的javascript怎么开

    大家好,小编为大家解答手机怎么启用javascript功能的问题。很多人还不知道安卓手机怎么运行js脚本,现在让我们一起来看看吧!         最近在研究c++与JavaScript的交互,有朋友问我安卓怎样与JavaScript交互,今天找到一个之前写的小demo,实现的是安卓webview里面的JavaScript和

    2024年01月23日
    浏览(42)
  • 【前端灵魂脚本语言JavaScript⑤】——JS中数组的使用

    🐚 作者: 阿伟 💂 个人主页: Flyme awei 🐋 希望大家多多支持😘一起进步呀! 💬 文章对你有帮助👉关注✨点赞👍收藏📂 第一种: var 数组名 = new Array(); 创建一个空数组 第二种: var arr2 = new Array(10); 创建一个定长为10的数组 第三种 var arr3 = new Array(a,b,c); 创建时直接指定元素值

    2023年04月08日
    浏览(42)
  • Linux:服务器间同步文件的脚本(实用)

    比如有三台服务器, hadoop102、hadoop103、hadoop104 ,且都有 atguigu 账号 循环复制文件到所有节点的相同目录下,且脚本可以在任何路径下使用 1、查看环境变量 2、进入 /home/atguigu/bin 目录 在该目录下创建脚本,则该脚本可以在任何路径下使用,因为,这个路径添加在环境变量中

    2024年04月28日
    浏览(32)
  • 前端项目部署自动检测更新后通知用户刷新页面(前端实现,技术框架vue、js、webpack)——方案一:编译项目时动态生成一个记录版本号的文件

    当我们重新部署前端项目的时候,如果用户一直停留在页面上并未刷新使用,会存在功能使用差异性的问题,因此,当前端部署项目后,需要提醒用户有去重新加载页面。 vue、js、webpack 编译项目时动态生成一个记录版本号的文件 轮询(20s、自己设定时间)这个文件,判断版

    2024年02月02日
    浏览(46)
  • 在JavaScript中添加css样式 js追加类

    一、原生js中添加类的方法 二、jquery中添加类的方法 三、检查是否含有某个类的方法 四、在JavaScript中添加CSS样式: 五、使用HTML DOM的setAttribute()方法更改CSS属性: 六、使用JavaScript可以通过动态创建样式表 style标签 来添加CSS样式。 例如,以下代码创建一个新的style标签,并

    2024年02月03日
    浏览(45)
  • html、css 和 JS(JavaScript) 的相互关联

    工作所需,需要承担一些字体矢量动效玩法实现;调研发现前端可以快速实现一些矢量动画效果; 本文旨在介绍前端的三大利器(HTML / CSS / JS)的区别和联系,就当个引子 HTML CSS JS 介绍 HTML是超文本标记语言的简称,它是一种不严谨的、简单的标识性语言。它用各种标签将页

    2024年02月10日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包