Javascript错误 - 找不到变量:google

时间:2011-09-27 10:23:26

标签: javascript iphone google-maps-api-3 extjs

我写的代码在浏览器上运行得非常好。但是当我在iPhone上连接到wifi时,我在调试器中出错: Javascript错误 - 无法找到变量:google

只要我调用任何谷歌地图/路线/地理位置对象,就会发生这种情况。


代码如下:

map = new Ext.Map({
    mapOptions : {
        center : center,
        zoom : 20,
       // mapTypeId : google.maps.MapTypeId.ROADMAP,
        navigationControl: true,
        navigationControlOptions: {
                style: google.maps.NavigationControlStyle.DEFAULT
            }
    },

    listeners : {
        maprender : function(comp, map){
            pos = new google.maps.LatLng(lats, longs, true);
            var marker = new google.maps.Marker({
                 position: pos,
                 //title : 'Sencha HQ',
                 map: map
            });

            map.setMapTypeId(google.maps.MapTypeId.HYBRID);
            setTimeout( function(){map.panTo (pos);} , 1000);
        }
    },

     geo:new Ext.util.GeoLocation({
         autoUpdate:true,
         maximumAge: 0,
         timeout:2000,
         listeners:{
             locationupdate: function(geo) {
                 pos = new google.maps.LatLng(lats, longs, true);
                 center = new google.maps.LatLng(geo.latitude, geo.longitude);
                 if (map.rendered)
                     map.update(center)
                 else
                     map.on('activate', map.onUpdate, map, {single: true, data: pos});
             },
             locationerror: function(geo, bTimeout, bPermissionDenied, bLocationUnavailable, message) {
                 if(bLocationUnavailable){
                     alert('Your Current Location is Unavailable on this device');
                 }
                 else if (bPermissionDenied){
                     alert('Location capabilities have been disabled on this device.');
                 }      
             }
         }
     })
});

只要代码遇到谷歌这个词,就会发生错误。同样对于LatLng对象,我得到javascript错误:“.... LatLng的结果不是构造函数”

注意:变量“lats”和“longs”已在此段代码之前的给定值中定义

5 个答案:

答案 0 :(得分:7)

对我有用:从

中删除“https”
<script src="https://maps.google.com/maps/api/js?sensor=false"></script>

所以它变成了

<script src="http://maps.google.com/maps/api/js?sensor=false"></script>

我不知道为什么Safari不会在不安全的页面上加载安全页面,但它似乎没有。然后抛出错误。这是唯一似乎表现得像这样的移动浏览器。

答案 1 :(得分:4)

所以我之前作为评论发布了这个,但由于这是问题的实际解决方案,我将再次发布:D

好的结果是我得到所有这些错误的原因是因为我在代理后面。奇怪的是,当我使用LAN电缆连接时,代理允许我访问谷歌库和服务器,但是当我使用WiFi时却没有。希望其他一些被卡住这种错误的人会发现这有点帮助:)

答案 2 :(得分:1)

您是否正在从Google服务器加载Google JavaScript库?如果是这样,当你没有WiFi时,这将无法正常工作。这就是为什么没有定义“谷歌”对象的原因。当您的设备在线时,您只能使用Google地图等。

编辑:没关系,你说你通过WiFi连接。奇。我想我们需要查看完整的源代码。

答案 3 :(得分:0)

我的解决方案是确保在Touch js之前加载Google Maps js。简单地说

<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=true"></script>

之前

<script id="microloader" type="text/javascript" src="touch/microloader/development.js"</script>

答案 4 :(得分:0)

检查您的config.xml是否有权导航到您在index.html中编写的Google Api地址。 仔细检查您是否正在使用“ https”或“ http”。我做了'https'

在您的index.html中:

`<script src="https://maps.google.com/maps/api/js?key=APIKEY" async defer type="text/javascript"></script>`

在您的config.xml中

`<access origin="https://maps.google.com/*" />
<allow-intent href="https://maps.google.com/*" />
<access origin="https://maps.gstatic.com/*" />
<allow-intent href="https://maps.gstatic.com/*" />
<access origin="https://maps.googleapis.com/*" />
<allow-intent href="https://maps.googleapis.com/*" />
<access origin="https://fonts.googleapis.com/*" />
<allow-intent href="https://fonts.googleapis.com/*" />`

这对我有用!