使用谷歌地图的javascript网页不能在Android上工作
javascript webpage using Google maps doesn't work on Android
我使用Javascript创建了一个简单的Google Maps网页。我解析一个XML文件,并在我所居住的韩国城市的地图上显示一系列标记。在windows机器上的所有浏览器上都运行良好,但当我在Android手机上访问同一页面时却完全不起作用。我得到了网页的所有html,包括菜单,广告等,但地图甚至没有显示。将电话连接到Eclipse并检查日志,但没有看到任何错误。有人知道为什么Android在显示谷歌地图页面时出现问题吗?
如果你想看代码,在这里:http://ulsanonline.com/ulsanmap.php我用来填充地图的javascript代码如下:
function detectBrowser() {
var useragent = navigator.userAgent;
var mapdiv = document.getElementById("map_canvas");
if (useragent.indexOf('iPhone') != -1 || useragent.indexOf('Android') != -1 ) {
mapdiv.style.width = '100%';
mapdiv.style.height = '100%';
} else {
mapdiv.style.width = '600px';
mapdiv.style.height = '800px';
}
}
var markersArray = new Array();
var map;
function initialize() {
var latlng = new google.maps.LatLng(35.543401,129.340954);
var myOptions = {
zoom: 12,
center: latlng,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
map = new google.maps.Map(document.getElementById("map_canvas"),
myOptions);
detectBrowser();
var dine_image = new google.maps.MarkerImage(
'/Maps/dine.png',
new google.maps.Size(50,50),
new google.maps.Point(0,0),
new google.maps.Point(25,50)
);
var drink_image = new google.maps.MarkerImage(
'/Maps/drink.png',
new google.maps.Size(50,50),
new google.maps.Point(0,0),
new google.maps.Point(25,50)
);
var shadow = new google.maps.MarkerImage(
'/Maps/shadow.png',
new google.maps.Size(78,50),
new google.maps.Point(0,0),
new google.maps.Point(25,50)
);
// read the xml file
if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else {// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.open("GET","/uoplaces.xml",false);
xmlhttp.send();
xmlDoc=xmlhttp.responseXML;
xml=xmlDoc.getElementsByTagName("place");
// parse xml
for (i=0; i < xml.length; i++) {
var name = xml[i].getElementsByTagName("name")[0].childNodes[0].nodeValue;
var type = xml[i].getElementsByTagName("name")[0].getAttribute("category");
var link = xml[i].getElementsByTagName("link")[0].childNodes[0].nodeValue;
var lat = xml[i].getElementsByTagName("lat")[0].childNodes[0].nodeValue / 1000000;
var long = xml[i].getElementsByTagName("long")[0].childNodes[0].nodeValue / 1000000;
var contentString = '<div id="content">'+
'<h1 id="firstHeading" class="firstHeading">' + name + '</h1>'+
'<a href=' + link + '>' + 'More Info' + '</a>'+
'</div>';
var infowindow = new google.maps.InfoWindow();
var myLatlng = new google.maps.LatLng(lat,long);
if (type == "restaurant") {
var marker = new google.maps.Marker({
position: myLatlng,
map: map,
type: type,
icon: dine_image,
shadow: shadow,
html: contentString
});
}
else {
var marker = new google.maps.Marker({
position: myLatlng,
map: map,
type: type,
icon: drink_image,
shadow: shadow,
html: contentString
});
}
google.maps.event.addListener(marker, 'click', (function(marker, i) {
return function() {
infowindow.setContent(this.html);
infowindow.open(map, marker);
}
})(marker, i));
markersArray.push(marker);
} // parse
for (i in markersArray) {
markersArray[i].setMap(map);
}
} //end function initialize
// Removes the overlays from the map, but keeps them in the array
function clearOverlays() {
if (markersArray) {
for (i in markersArray) {
markersArray[i].setMap(null);
}
}
}
// Shows any overlays currently in the array
function showOverlays(category) {
if (markersArray) {
for (i in markersArray) {
if (markersArray[i].type == category) {
markersArray[i].setMap(map);
}
}
}
}
我实际上已经创建了一个Android应用程序使用相同的GoogleMaps API,数据和目的,它也工作得很好。这只是Android浏览器或Android上的Firefox不起作用,这使我认为它可能是在initialize()函数中完成的XMLHTTPREQUEST。
任何想法?
你试过包括这些元标签吗?
<meta name="HandheldFriendly" content="true" />
<meta name="viewport" content="width=device-width, height=device-height, user-scalable=no" />
EDIT:
你的网页可以在Android 4.0.3上运行。你添加了一些代码,虽然我看到
function detectBrowser() {
var useragent = navigator.userAgent;
var mapdiv = document.getElementById("map_canvas");
if (useragent.indexOf('iPhone') != -1 || useragent.indexOf('Android') != -1 ) {
mapdiv.style.width = '480px';
mapdiv.style.height = '600px';
var parent = document.getElementById('templatemo_container'); var nastylogo = document.getElementById('templatemo_top_panel'); parent.removeChild(nastylogo);
} else {
mapdiv.style.width = '600px';
mapdiv.style.height = '800px';
}
}
虽然行"parent.removeChild(nastylogo);"抛出"Uncaught Error: NOT_FOUND_ERR: DOM Exception 8"
如果有人遇到这种情况,问题出在我的CSS上。我设置了iPhone或Android的%,但没有设置大小。如果我使用的是台式机/笔记本电脑浏览器,则设置了大小,但如果我使用的是手机浏览器,则设置了未设置的%,则无法在map_canvas上进行绘制。
- window.onload没有'无法在Android WebView中工作
- webview日期选择器可以在android模拟器中工作,但不能在设备上工作
- 页面更改无法在android上使用Phonegap Build的JqueryMobile中工作
- 字符串替换不'当通过android webView JavascriptInterface传递字符串时无法工作
- 从android webview调用时getJSON不工作
- Cordova iframe在iOS Safari中工作,但在Android中不起作用
- 如何让原生 WebSocket 在 Android 4.03 及更高版本中工作
- Android Web Console: UncaughtReferenceError: 未定义工作线程
- React Native - Android应用程序在调试上工作,在发布时崩溃
- 多设备混合应用程序 - 有没有人让 android 的索引数据库插件工作
- JQuery Autocomplete在Chrome中工作,但不能使用phonegap在Android中工作
- Pouch DB Remote无法在Android设备上工作
- 当屏幕关闭时,HTML5音频/javascript在android(谷歌chrome)上停止工作
- 鼠标无法在Android网页上工作
- jquery时间选择器在phonegap android中不工作
- textbox焦点无法在使用JavaScript和phonegap的android设备中工作
- Cordova Android禁用后退按钮[不工作]
- Phonegap Android与JSONP不工作
- html5 SessionStorage没有'不能在android模拟器中工作
- 地理定位可以在网络浏览器上工作,但不能在android手机浏览器上工作