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

2023-10-28

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})

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • 2021.11.12总结

    把入门3循环结构的题大致写完了
  • 树莓派4B之Windows XP系统安装游戏(一)

    上一篇博文 树莓派4B安装windows xp windows 95 windows xp windows 95 for raspberry pi 4B 下一篇博文 树莓派4B之Windows XP系统安装游戏 二 目录 一 模拟器 游戏下
  • AI新手必看:如何区分参数和超参数

    相信所有人刚开始应用机器学习时 都会被两个术语混淆 计算机学科里有太多的术语 而且许多术语的使用并不一致 哪怕是相同的术语 不同学科的人理解一定有所不同 比如说 模型参数 model parameter 和 模型超参数 model Hype
  • 华为nova6se怎么升级鸿蒙,华为EMUI11支持哪些手机

    华为EMUI11适配机型有什么 首批支持EMUI11 更新的机型有 P40 系列 Mate30 系列 MatePad Pro系列等 10 款机型 先了解更多EMUI11适配机型相关内容的小伙伴下面和小编一起来看看吧 华为EMUI11适配机型
  • VC++ 图像颜色调节

    1 BMP图片在GDI方式下贴图 32位位图 半透明像素会显示黑色或白底 像素处理代码 void CrossImage CImage img if img IsNull return 确认该图像包含Alpha通道 if img GetBPP
  • JAVA的图形用户界面布局GUI入门(上)

    java的GUI企业里面用的比较少 现在主流的UI都使用HTML5 开发 Java提供了三个主要包 做GUI开发 java awt 包 主要提供字体 布局管理器 javax swing 包 商业开发常用 主要提供各种组件 窗口 按钮 文本框
  • 神经网络学习之一——M-P模型

    神经网络学习之一 M P模型 M P模型是什么 M P模型是于1943年美国神经生理学家沃伦 麦卡洛克 Warren McCuloch 和数学家沃尔特 皮茨 Walter Pitts 提出 是首个通过模仿神经元而形成的模型 结构图如下所示
  • 主机地址变更后,dubbo请求时依旧会寻址旧IP的问题

    机房迁移 导致测试服务器IP变更 比原于IP为192 168 1 105变更为10 1 9 120 服务源码未做任何变更 启动服务时依旧是旧地址请求 此问题由dubbo本地注册中心的缓存所致 清理掉即可 位置一般在于 用户目录 dubbo目
  • Redis(一)常见命令使用

    常见文件名 Redis cli使用命令 1 启动Redis 2 连接Redis 3 停止Redis 4 发送命令 1 redis cli带参数运行 如 2 redis cli不带参数运行 如 5 测试连通性 key操作命令 获取所有键 查询
  • PostgreSQL系列3:PostgreSQL导入导出SQL

    启动数据库 pg ctl D data db pgsql data l data db pgsql logs pgsql log start 关闭数据库 pg ctl D data db pgsql data stop 使用pgsql客户端
  • R语言实战学习--回归

    文章目录 普通最小二乘回归 OLS 简单线性回归 多项式回归 多元线性回归 回归诊断 标准方法 QQ图正态性检验 残差图 误差的独立性 成分残差图 偏残差图 线性 同方差性 线性模型假设综合验证 异常观测值 高杠杆值 强影响点 变量添加图
  • 爬虫基础————ip地址和url详解

    学习慕课网bobby老师的课程从零起步 系统入门Python爬虫工程师时做的笔记 有兴趣的同学可以去慕课网观看视频 1 ip地址 整个网络传输可以比作快递 数据就是快递包裹 会经过一系列中转站 分包捡包等操作 最后才送到客户手中 Ip地址就
  • Python程序:输出杨辉三角的几种办法

    文章目录 一 问题描述 二 问题分析 三 第一种方法 1 具体代码 2 运行结果 3 程序的改进 四 第二种方法 1 具体代码 2 运行结果 五 总结分析 一 问题描述 给定一个非负整数 n 生成 杨辉三角 的前 n行 在 杨辉三角 中 每
  • 【文献调研】多任务学习-Part1

    基于数据增强和多任务学习的突发公共卫生时间谣言识别研究 摘要 Motivation 通过引入多任务学习模型和数据增强方法 解决突发公共卫生事件情景下谣言识别任务数据不平衡且带标签数据量少的问题 Methods 首先提取突发公共卫生事件谣言文
  • 《Learning Spark》第八章:调优及调试spark应用

    2020 07 05 引言 我记得当时我就是因为使用hadoop太过费劲了 才上手的spark 然后因为自己的机器性能不行 又一点一点调优 当时调优的过程 主要是从底层的结构上来进行调优 主要就是那些worker数量以及内存大小等等 但是对
  • PyTorch和TensorFlow生成对抗网络学习MNIST数据集

    介绍 生成对抗网络 简称GAN 是最近开发的最受欢迎的机器学习算法之一 对于人工智能 AI 领域的新手 我们可以简单地将机器学习 ML 描述为AI的子领域 它使用数据来 教 机器 程序如何执行新任务 一个简单的例子就是使用一个人的脸部图像作
  • png四通道透明背景图成功加入到视频帧中 使用了mask原理

    import cv2 import ffmpeg import cv2 import numpy as np import glob video f D CCTV CCTV mp4 视频文件名 output f D CCTV logoaft
  • 共享内存---结构体使用

    共享内存主要是通过映射机制实现的 Windows 下进程的地址空间在逻辑上是相互隔离的 但在物理上却是重叠的 所谓的重叠是指同一块内存区域可能被多个进程同时使用 当调用 CreateFileMapping 创建命名的内存映射文件对象时 Wi
  • 网络基础-应用层:E-mail应用:SMTP协议,POP协议,IMAP协议

    Email应用的构成 邮件客户端 邮件服务器 SMTP协议 只支持文本 邮件服务器 邮箱 存储发给该用户的Email 消息队列 存储等待发送的Email SMTP协议 邮件服务器之间传递消息所使用的协议 客户端 发送消息的服务器 服务器 接
  • js实用方法记录-js动态加载css、js脚本文件

    js实用方法记录 动态加载css js 附送一个加载iframe h5打开app代码 1 动态加载js文件到head标签并执行回调 方法调用 dynamicLoadJs http www yimo link static js main m