我不知道如何在SO中搜索这个,所以我问了一个新问题。可能导致什么或我的代码的具体问题是什么:Javascript(createElement()
和appendChild
)生成的HTML没有在Opera和Firefox中显示,但它在Chromium中有效。
HTML生成代码:
function typesOfPlaces(map, bounds) {
var allowedTypes = [
"amusement_park",
"aquarium",
"art_gallery",
"cemetery",
"church",
"city_hall",
"hindu_temple",
"mosque",
"museum",
"night_club",
"park",
"place_of_worship",
"rv_park",
"spa",
"synagogue",
"travel_agency",
"zoo"
];
var typesToDisplay = new Array();
var request = {
bounds: bounds,
types: allowedTypes
};
var service = new google.maps.places.PlacesService(map);
service.nearbySearch(request, function(results, status) {
if(status == google.maps.places.PlacesServiceStatus.OK) {
for(var i = 0; i < results.length; i++) {
for(var j = 0; j < results[i].types.length; j++) {
for(var k = 0; k < allowedTypes.length; k++) {
if(results[i].types[j] == allowedTypes[k]) {
var allowed = true;
for(var x = 0; x < typesToDisplay.length; x++) {
if(allowedTypes[k]==typesToDisplay[x]) {
allowed = false;
}
}
if(allowed) {
typesToDisplay.push(allowedTypes[k]);
}
}
}
}
}
var parent = document.getElementById("types");
for(var i = 0; i < typesToDisplay.length; i++) {
var typeBox = document.createElement("div");
var checkBox = document.createElement("input");
var checkID = randomString(10);
var label = document.createElement("label");
checkBox.setAttribute("type", "checkbox");
checkBox.setAttribute("id", checkID);
label.setAttribute("for", checkID);
label.innerHTML = typesToDisplay[i];
typeBox.appendChild(checkBox);
typeBox.appendChild(label);
parent.appendChild(typeBox);
}
}
});
}//END OF Function
更新评论
randomString只是用于生成随机字符串的SO代码:
function randomString(L) {
var s= '';
var randomchar=function() {
var n= Math.floor(Math.random()*62);
if(n<10) return n; //1-10
if(n<36) return String.fromCharCode(n+55); //A-Z
return String.fromCharCode(n+61); //a-z
}
while(s.length< L) s+= randomchar();
return s;
}
div #types确实存在,它看起来像这样:
<html>
<head>
...
<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?key=MyKey&sensor=false&libraries=places&language=lt"></script>
</head>
<body>
<div>
<div>
<div id="types"></div>
</div>
</div>
</body>
</html>
您可以通过查看<head>
标记的<script>
部分来查看google.maps.places.PlacesService的导入,其中您可以看到“&amp; libraries = places”。
某些测试后的第二次更新
确定。我已经发现,如果我拒绝在歌剧中的位置共享它是有效的(它在铬中起作用,因为默认它甚至不会问用户他是否善意与网站分享他的地理位置)
地理位置代码:
function initGeo()
{
if (navigator.geolocation)
{
navigator.geolocation.getCurrentPosition(successFunction, errorFunction);
}
else
{
errorFunction();
}
}
所以,不起作用的功能是successFunction(如果用户友好地分享他的地理位置,则会启动)
function successFunction(position)
{
var geocoder = new google.maps.Geocoder();
var abstract_location;
var latlng = new google.maps.LatLng(position.coords.latitude, position.coords.longitude);
geocoder.geocode({'latLng': latlng}, function(results, status)
{
if (status == google.maps.GeocoderStatus.OK)
{
abstract_location = new google.maps.LatLngBounds(
results[0].geometry.viewport.getSouthWest(),
results[0].geometry.viewport.getNorthEast());
}
else
{
alert("NOT SUCCESS 1");
}
showGMap(latlng, abstract_location);
});
}
errorFunction,默认情况下成功处理chrome,如果拒绝访问地理位置,则在Opera上成功运行:
function errorFunction(error)
{
var geocoder = new google.maps.Geocoder();
if(google.loader.ClientLocation)
{
var latlng = new google.maps.LatLng(google.loader.ClientLocation.latitude, google.loader.ClientLocation.longitude);
geocoder.geocode({'latLng': latlng}, function(results, status)
{
if (status == google.maps.GeocoderStatus.OK)
{
var abstract_location = new google.maps.LatLngBounds(
results[0].geometry.viewport.getSouthWest(),
results[0].geometry.viewport.getNorthEast());
}
else
{
alert("NOT SUCCESS 2");
}
showGMap(latlng, abstract_location);
});
}
else
{
geocoder.geocode( {'address': 'Vilnius Region, Lithuania'}, function(results, status)
{
if (status == google.maps.GeocoderStatus.OK)
{
var latlng = results[0].geometry.location;
var abstract_location = new google.maps.LatLngBounds(
results[0].geometry.viewport.getSouthWest(),
results[0].geometry.viewport.getNorthEast());
showGMap(latlng, abstract_location);
}
else
{
alert("NOT SUCCESS 3");
}
});
}
}
Nor Chromium和Opera不会给我任何错误,也不会给我一般的错误,也不会给我带来任何错误。
所以问题在于成功的功能。因为它甚至没有给我提醒(typesToDisplay.length)[正如Stuart在评论中所建议的] - 这意味着根本没有警报 - 如果出现错误,我会得到aswer 4,因此我可以看到我的生成HTML。
如果成功,则只有空(没有任何附加的孩子)#types。
我没有看到导致成功功能的原因是NOTSUCCESS(:))
答案 0 :(得分:0)
好的,所以我已经弄明白了 - 虽然很简单......
你得到的地理位置数据是一个地址,所以界限非常小,你必须用反向地理编码提取城市(结果[6] .formatted_address),然后你对反向地理编码进行地理编码(如此混淆,虽然地理编码 - &gt;反转 - >再次地理编码)然后它可以工作!
所以问题在于地理编码(没想到地址的边界不是整个城市(首先应该是显而易见的,但事实并非如此)。
HTML5地理编码可能有关于城市的信息(不仅是lan和lng,firefox有东西,但那只是firefox,而不是整个HTML5),但我不知道它是否好(缺乏我的在这个特定领域的个人知识)
所以如果有人做了类似的事情 - &gt; 检查界限;)
感谢您,感谢您的评论和观点。