在DOM加载之前insertScript
起因
由于工作原因需要联调碧桂园的SDK 大概是以下代码,起初我是放在head中的,因为最初这样调试,包括线上环境都是OK的,可以获取到SDK的内容,换句话说js节点是可以插入到root内的,自从换了一套webpack4的构建、包括加快DNS速度、包括asyncScript标签之后,发现这个插入语句不起作用了,这个事情很神奇。
    <script>
      var agent = navigator.userAgent.toLowerCase();
      //平台、设备和操作系统
      var system ={
      win : false,
      mac : false,
      xll : false
      };
      //检测平台
      var p = navigator.platform;
      system.win = p.indexOf("Win") == 0;
      system.mac = p.indexOf("Mac") == 0;
      system.x11 = (p == "X11") || (p.indexOf("Linux") == 0); 
      function appendScript (url) {
        var script=document.createElement("script");
        script.setAttribute("src", url);
        var heads = document.getElementById("root");
        heads.appendChild(script)
      }
      //跳转语句,如果是手机访问就自动跳转到caibaojian.com页面    
      if(system.win||system.mac||system.xll){
      } else if (agent.match(/MicroMessenger/i) == "micromessenger") {
      } else if (/iPad|iPhone|iPod/.test(navigator.userAgent)) {
          console.log('iOS')
          appendScript('https://biheopen.bgycc.com/jssdk.js')
          appendScript('https://biheopen.bgycc.com/cordova-ios.js')
      } else {
          console.log('android')
          appendScript('https://biheopen.bgycc.com/jssdk.js')
          appendScript("https://biheopen.bgycc.com/cordova-android.js")
      }
    </script>
昨天下午发现的,直到今天早上我调了一下这个问题,总结一下。
这段语句不能写在</body>之前,因为webpack的原因main script也会在</body>之前插入,但是我们希望的是他在main script之前加载,但是这句话appendScript 会让浏览器异步加载script 内容,这样我们就不能保证是main script先加载还是jssdk先加载了。
解决办法
在head中另加一个script片段,把js放在DOMContentLoaded中做处理,这样的话它会在load main script之前去做load jssdk标签,并且是一个同步加载的过程
    <script>
        if ('addEventListener' in document) {
            document.addEventListener('DOMContentLoaded', function() {
                // 插入
                ......
            }, false);
        }
    </script>
当然还有其他方式解决这个问题这里就不做深究。
在DOM加载之前insertScript的更多相关文章
- DOM加载过程中ready和load的区别
		
在浏览器地址栏输入URL地址,浏览器开始加载页面时,有以下几个过程 1.浏览器开始解析HTML文档 2. 浏览器遇到HTML文档中的<script>元素以及CSS样式文件,并且没有asyn ...
 - jQuery实现DOM加载方法源码分析
		
传统的判断dom加载的方法 使用 dom0级 onload事件来进行触发所有浏览器都支持在最初是很流行的写法 我们都熟悉这种写法: window.onload=function(){ ... } 但 ...
 - DOM加载:浏览器渲染和操作顺序(转载  学习中。。。)
		
DOM加载:浏览器渲染和操作顺序 1.HTML解析完毕 2.外部脚本和样式表加载完毕 3.脚本在文档内解析并执行 4.HTML DOM完全构造起来 5.图片和外部内容加载 6.网页完成加载 基于这个顺 ...
 - jquery源码 DOM加载
		
jQuery版本:2.0.3 DOM加载有关的扩展 isReady:DOM是否加载完(内部使用) readyWait:等待多少文件的计数器(内部使用) holdReady():推迟DOM触发 read ...
 - 【Dojo 1.x】笔记3 等待DOM加载完成
		
有的web页面总是得等DOM加载完成才能继续执行功能,例如,待页面DOM加载完成后,才能在DIV上进行渲染图形. Dojo提供了这个功能的模块,叫domReady,但是由于它很特殊,就在结尾加了个叹号 ...
 - jQuery学习(监听DOM加载)
		
jQuery的extend方法 function njQuery() { } /* njQuery.extend = function (obj) { // 此时此刻的this就是njQuery这个类 ...
 - js实现类型jq的dom加载完成
		
有时候我们只想在 dom 加载完成后运行 js ,而不是等所有图片加载完成.所以不需要 onload , onload 会加载图片等其他媒体.很消耗时间. 原:http://blog.csdn.net ...
 - 原生JS实现AJAX、JSONP及DOM加载完成事件,并提供对应方法
		
JS原生AJAX ajax:一种请求数据的方式,不需要刷新整个页面: ajax的技术核心是 XMLHttpRequest 对象: ajax 请求过程:创建 XMLHttpRequest 对象.连接服务 ...
 - 原生JS实现AJAX、JSONP及DOM加载完成事件
		
一.JS原生Ajax ajax:一种请求数据的方式,不需要刷新整个页面:ajax的技术核心是 XMLHttpRequest 对象:ajax 请求过程:创建 XMLHttpRequest 对象.连接服务 ...
 
随机推荐
- 团体程序设计天梯赛(CCCC) L3015 球队“食物链” 状态压缩
			
团体程序设计天梯赛代码.体现代码技巧,比赛技巧. https://github.com/congmingyige/cccc_code #include <cstdio> #include ...
 - GO语言系列(五)- 结构体和接口
			
结构体(Struct) Go中struct的特点 1. 用来自定义复杂数据结构 2. struct里面可以包含多个字段(属性) 3. struct类型可以定义方法,注意和函数的区分 4. struct ...
 - JGUI源码:Accordion折叠到侧边栏实现(6)
			
折叠和非折叠效果如左右图所示 代码如下 //折叠 $.fn.jAccordionfold = function() { return this.each(function() { var obj = ...
 - About the Importance of Aim in Life
			
Have an aim in life, or your energies will all be wasted. ---R. Peters 人生应该树立目标,否则你的精力会白白浪费. ---彼得 ...
 - EffectiveC++ 第6章 继承与面向对象设计
			
我根据自己的理解,对原文的精华部分进行了提炼,并在一些难以理解的地方加上了自己的"可能比较准确"的「翻译」. Chapter 6 继承与面向对象设计 Inheritance and ...
 - 不二之选_iTOP-4418开发板研发之旅_缩短开发时间
			
迅为iTOP-4418开发板拿到手?用能力印证梦想,培养你的研发路程,能力·思维 一.板载WIFI蓝牙.4G.GPS.千兆以太网接口.串口.重力加速度计等. 二.自选模块支持500W摄像头自动对焦摄像 ...
 - hiho 1098  最小生成树二·Kruscal算法 (最小生成树)
			
题目: 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 随着小Hi拥有城市数目的增加,在之间所使用的Prim算法已经无法继续使用了——但是幸运的是,经过计算机的分析, ...
 - 其他-pkuwc2019数学考试题目
			
时限150min,有windows和Ubuntu使用 十道填空题,在poj上举行,选手提交答案,系统将答案自动填入一个作用是输出答案的程序,再将该程序提交评测(由于该程序变量名为longlong,所以 ...
 - how2heap学习笔记
			
github源代码地址 这里只分析glibc2.25堆分配的特性,为了方便调试编译时使用 gcc -g -no-pie <input_file_name> -o <output_fi ...
 - FastDFS使用
			
1.在linux系统中安装FastDFS服务image-server.7z 2.导入FastDFS jar包 fastdfs_client_v1.20.jar 3.创建配置文件fastdfs_clie ...