1

我使用Sencha Touch和Phonegap构建一个小应用程序。
在这个应用程序,我需要谷歌地图API,因为我想显示地图。当互联网可通过Ext.data.connection加载谷歌地图API Sencha Touch和Phonegap

如果设备没有互联网连接,则存在问题,因此Google地图API无法加载到HTML中。所以我检查互联网连接。
如果互联网连接可用我尝试用Ext.data.connection加载谷歌地图API:

var conn = new Ext.data.Connection(); 
var url = 'http://maps.google.com/maps/api/js?sensor=true&'; 
conn.request({ 
    url: url, 
    callback: function(options, success, response){ 
      if(response && response.responseText){ 
       // do something 
      } 
    }, 
    method:'GET'} 
); 

如果我在测试谷歌Chrome应用程序,我收到以下错误:XMLHttpRequest cannot load http://maps.google.com/maps/api/js?sensor=true&amp ;_dc=1302077479281. Origin null is not allowed by Access-Control-Allow-Origin.

一点也没有如果我尝试通过file:///或通过网络服务器(http://localhost/app

尝试调用HTML无论如何获取Google地图API并“绕过”或避免此访问控制行为?

回答

3

嘿,对不起,这不会是一个简单的答案。

我想你想使用条件脚本加载器。这些都是API,只有当条件(你有网络连接)满足时才会将脚本添加到文档中。

一个好的是http://yepnopejs.com/

根据这一线索,有可能加载谷歌地图,但它在线程说你必须做的。 Google Maps with YepNope

具体来说,包括yepnope.js并删除任何对Google地图的引用。

yepnope([{ 
     load: 'http://www.google.com/jsapi', 
     callback: function(){ 
      google.load("maps", "3", { 
       callback: function(){ 
        console.log("loaded"); 
       }, 
       other_params: "sensor=false" 
      }); 
     } 
    }]); 

当它的时间呈现地图(必须谷歌地图满载后进行),请确保您添加Ext.Map卡,然后拨打:

this.doLayout(); 

我觉得这“会的工作非常适合你,它的工作对我来说...

+0

感谢您的回答,这可以工作。我自己发布了一个解决方案,没有任何额外的库需要... – hering 2011-04-07 13:10:23

+0

与yepnope,我可以做其他与成功和失败的东西,这是一个完整的API,也许为你所需要的矫枉过正。 – ballmw 2011-04-07 13:30:40

3

我发现从谷歌的一些指令,因此下面的工作:

var script = document.createElement("script"); 
script.type = "text/javascript"; 
script.src = "http://maps.google.com/maps/api/js?sensor=true&callback=initializeMap"; 
document.body.appendChild(script); 
+0

我相信这可以正常工作。 – ballmw 2011-04-07 13:32:00