论坛首页 Web前端技术论坛

google Api javascript 动态加载

浏览 5732 次
精华帖 (0) :: 良好帖 (8) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-05-06   最后修改:2009-05-06
google 动态加载api 不仅仅可以加载自产的ajax模组,同时也可以加载众多流行的三方模组,如jQuery, dojo,yui等等。本文将对此动态加载方式做一个简单介绍。

这种动态加载方式很简单,首先包含google动态加载api本身的.js文件,代码如下:
<script type="text/javascript" src="http://www.google.com/jsapi"></script>


然后用google.load(模块名字,版本号)加载模组比如:
google.load("maps","2"); //加载gmap
google.load("search","1");//加载search
google.load("jquery","1.3.2");//加载jquery
google.load("dojo","1.3.0");//加载dojo


最后一步很重要,我们要运行google.setOnLoadCallBack(你的初始函数)。为什么要运行这个函数呢?因为你自己的初始函数里如果调用了尚未加载完成的模块中的代码,浏览器就会报错,你的ajax程序就中断停止运行了。

一个完整的实例是:
<html>
  <head>
    <script type="text/javascript"
            src="http://www.google.com/jsapi?key=ABCDEFG"></script>
    <script type="text/javascript">
      google.load("maps", "2");
      google.load("search", "1");

      // Call this function when the page has been loaded
      function initialize() {
        var map = new google.maps.Map2(document.getElementById("map"));
        map.setCenter(new google.maps.LatLng(37.4419, -122.1419), 13);

        var searchControl = new google.search.SearchControl();
        searchControl.addSearcher(new google.search.WebSearch());
        searchControl.addSearcher(new google.search.NewsSearch());
        searchControl.draw(document.getElementById("searchcontrol"));
      }
      google.setOnLoadCallback(initialize);
    </script>

  </head>
  <body>
    <div id="map" style="width: 200px; height: 200px"></div>
    <div id="searchcontrol"></div>
  </body>

</html>


下面的url列出了google loader api 可以加载的模组及其版本号。
加载自产的组件:
http://code.google.com/apis/ajax/documentation/
加载第三方组件:
http://code.google.com/apis/ajaxlibs/documentation/



   发表时间:2009-05-06  
google第三方类库的jsapi有个隐患,浏览用户在google上搜索什么东西被墙掉,在这阶段里jsapi会同样不可用
0 请登录后投票
   发表时间:2009-05-06  
闲云无心 写道
google第三方类库的jsapi有个隐患,浏览用户在google上搜索什么东西被墙掉,在这阶段里jsapi会同样不可用


jsapi不工作,你是说在加载前,还是加载后。模块加载完成后,模块就和jsapi无关了。比如如果你已经成功加载了dojo模组,而你的search模组挂起了,dojo模组还是可以运行的。但是如果你的search模组挂起之后,你的代码还想动态加载其他模组就有可能失败。

当然如果你的浏览器设置成javascript一旦出错,就终止javascript编译器的工作,那么你所有的javascript都在出错后停止运行。
0 请登录后投票
   发表时间:2009-05-06  
gty509 写道
闲云无心 写道
google第三方类库的jsapi有个隐患,浏览用户在google上搜索什么东西被墙掉,在这阶段里jsapi会同样不可用


jsapi不工作,你是说在加载前,还是加载后。模块加载完成后,模块就和jsapi无关了。比如如果你已经成功加载了dojo模组,而你的search模组挂起了,dojo模组还是可以运行的。但是如果你的search模组挂起之后,你的代码还想动态加载其他模组就有可能失败。

当然如果你的浏览器设置成javascript一旦出错,就终止javascript编译器的工作,那么你所有的javascript都在出错后停止运行。

你理解错我意思了,我说的不是js本身问题,而是用户在google搜索敏感内容被屏蔽几分钟,这之后打开或者刷新你的页面,而你的页面用到的是jsapi托管的第三方类库,就有点问题了


可能你没碰到过这种情况

举个例子

访问http://www.google.com/jsapi是没问题的

但是一旦客户之前google了什么敏感的关键字被墙一段世间

譬如搜索个phproxy,然后随便点个连接
http://www.google.com/url?sa=t&source=web&ct=res&cd=4&url=http%3A%2F%2Fbbs.netbirds.com%2Fproxy%2F&ei=UhgBSsuDGYj4tAPpsZnsBQ&rct=j&q=phproxy&usg=AFQjCNGefrJjwHpk-x_HShQuazW4JwDpBA&sig2=2oxvxwTv5xZHNmLBeHgFWw

之后再访问 http://www.google.com/jsapi,就会页面载入错误

web应用本身需要的第三方类库还是不要太依赖google jsapi了
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics