Js判断是否联网引入不同js

Js判断是否联网引入不同js

 需求:当百度地图在内网中也能使用。

 分析:js判断是否联网,然后根据联网状态加载不同js。

 失败案例:

1、直接document.write

<script language=”javascript”> 

    document.write(“<script src=’xxx.js’><\/script>”); 

</script>

2、动态改变已有script的src属性

<script src=” id=”s1″></script> 

<script language=”javascript”> 


    s1.src=”xxx.js” 

</script>

3、动态创建script元素

<script> 

    var oHead = document.getElementsByTagName(‘HEAD’).item(0); 
    var oScript= document.createElement(“script”); 
    oScript.type = “text/javascript”; 
    oScript.src=”xxx.js”; 
    oHead.appendChild( oScript); 

</script>

失败原因:这三种方法都是异步执行的,也就是说,在加载这些脚本的同时,主页面的脚本继续运行。导致下面的new BMap.Map()直接报错。正确的思路是用函数回调保证js加载完毕后继续执行后面代码。

正解:

需要js文件:Jquery.js,Ping.js

<script language="javascript">
    $(function(){
       var p = new Ping();
       p.ping("http://api.map.baidu.com", function(err, data) {
             if (err) {  //离线
                $.getScript("http://127.0.0.1:80/bdmap/js/apiv2.0.min.js",function(){  //加载内网js,成功后执行回调函数
                    $("<link>").attr({ rel: "stylesheet",type: "text/css",href: "http://127.0.0.1:80/bdmap/css/bmap.css"}).appendTo("head");   //引入css
                    loadMap();   
                 });  //加载js文件            
             }else{   //在线
                 $.getScript("http://api.map.baidu.com/api?v=2.0&ak=xxxxxxxxx",function(){  //加载在线js,成功后执行回调函数
                     loadMap();
                 });  //加载js文件    
              }
                    
        });
                
     });
</script>

用Ping.js判断是否联网。用Jquery的$.getScript( url [, success(script, textStatus, jqXHR) ] )加载js。如果引入的js和其他js必须按照一定顺序则在$.getScript()回调函数中再执行$.getScript()。

转载于:https://www.cnblogs.com/aeolian/p/8853882.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/101718.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • matlab as(assert dominance)

    目录一.语法1.输入参数二.说明三.示例1.值在预期范围之内2.期望的数据类型3.预期的代码执行情况assert是条件为false时引发错误。一.语法assert(cond)assert(cond,msg)assert(cond,msg,A1,…,An)assert(cond,errID,msg)assert(cond,errID,msg,A1,…,An)1.输入参数cond-断言条件MATLAB表达式..

    2022年4月15日
    43
  • oracle数据库怎么更改表名,oracle如何修改表名_数据库

    oracle数据库怎么更改表名,oracle如何修改表名_数据库Oracle建表语句是什么_数据库Oracle建表语句是CREATETABLEtablename(column_namedatatype)。其中tablename是要创建的表名,column_name是字段名,datatype是字段类型。oracle如何修改表名方式一altertableold_table_namerenametonew_table_name;这是最简单的(个人认…

    2022年5月17日
    73
  • make_pair[通俗易懂]

    make_pair[通俗易懂]Utilities由短小精干的类和函数构成,执行最一般性的工作。这些工具包括:generaltypes一些重要的C函数numericlimitsPairsC++标准程序库中凡是“必须返

    2022年7月2日
    57
  • zookeeper入门教程_日语入门自学

    zookeeper入门教程_日语入门自学zookeeperwatcher架构zookeeper 配置中心分布式ID分布式锁集群搭建数据一致性协议:zab协议Zookeeper Leader选举Observer角色及其配置watcher架构客户端首先将Watcher注册到服务器,同时将Watch对象保存到客户端的Watch管理器中。当Zookeeper服务器监听到的数据发生变化时,服务器会通知客户端,接着客户端的Watch管理器会触发相关的Watcher来回调响应处理逻辑,从而完成整体的数据发布/订阅流程。javaAPIJava

    2022年8月8日
    7
  • EmWin学习课堂_小白EmWin_EmWin快速入门_EmWin动态内存,显示和触摸屏_EmWin基础配置

    EmWin学习课堂_小白EmWin_EmWin快速入门_EmWin动态内存,显示和触摸屏_EmWin基础配置一、先说说什么是EmWin,它就是一款中间软件包,弄好了之后,我们的界面设计就会变得很简单,在电脑GUI_Builder上做一个界面,生成.c文件,复制到自己的工程里面,我们的显示屏就能得到一模一样的功能。二、在我们使用一个带触摸和显示器的系统的时候,首先就是驱动他们,做完了就应该是这样的:也就是说我们的系统首先得有一个带触摸(不带也行)的系统,接着就是把这两个东西和EmWin关联起来…

    2022年10月14日
    2
  • jquery获取scrollHeight

    jquery获取scrollHeight$(“yourselector”).prop(“scrollHeight”);其他操作:$(window).height();//浏览器当前窗口可视区域高度$(document).height();//浏览器当前窗口文档的高度$(document.body).height();//浏览器当前窗口文档body的高度$(document.body).outerHeight(true);//浏览器当前窗口文档body的总高度包括borderpaddingmargin$(wind

    2022年7月24日
    26

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号