我写的代码在浏览器上运行得非常好。但是当我在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”已在此段代码之前的给定值中定义
答案 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/*" />`
这对我有用!