0

我在设置标记位置和地图中心时遇到问题,出现“属性值无效”错误或“属性值无效”错误,例如:

错误:属性值无效:(13.7323691218542, 100.64347976627096) 源文件: http ://maps.gstatic.com/intl/en_us/mapfiles/api-3/13/5/main.js行:26

这是基于对 Firefox 和 Chrome 的测试

我的顶级 HTML 包含: Javascript 函数 " move_it()" 一个 iframe (id: "mapIframe") 源自 cgi (nwfMap.cgi)

“mapIframe” iframe cgi 包含: 用于地图的 var mapNwf 用于标记的 var markerMe 来自 cgi (nwfSetInfo.cgi) 的 iframe (id: “myInfoIframe”)

“myInfoIframe” iframe cgi 包含: 调用move_it()顶部 HTML 中定义的函数“” 此调用旨在将标记 (markerMe) 移动到特定位置,并将地图 (mapNwf) 中心设置到相同的特定位置

“”的调用move_it执行正常,直到它尝试执行: mrk.setPosition(pos);

mp.setCenter(pos);

在这里我遇到了“无效的属性值......”错误。前一次执行是:

alert('mp = [' + mp.getCenter() + ']'); and
alert('mrk = [' + mrk.getPosition() + ']');

可以显示正确的位置(纬度/经度)值(地图中心和标记位置)

所以问题是,如何为相同的地图和标记变量工作,但getCenter和失败了?getPositionsetCentersetPosition

如果getCentergetPosition返回正确的数据,则表明不存在变量上下文问题,对吗?

但是为什么我只能通过这些变量“读取”而不是“设置”值呢?

是否与 google 行的外观有关:在顶部 HTML 中、在其 iframe 中以及在 iframe 的 iframe 中?重复和嵌套级别导致一些谷歌地图上下文问题导致我的问题?

非常感谢您的任何建议!以下是供您检查和调查的相关代码部分:

顶部 HTML 的相关部分

<html>
........
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false">    </script>
<script language="JavaScript">
function move_it(slat, slng) {
    var ifrm = document.getElementById('mapIframe');
    var mp = ifrm.contentWindow.mapNwf;
    var mrk = ifrm.contentWindow.markerMe;
    var pos = new google.maps.LatLng(slat,slng);
    alert('mp = [' + mp.getCenter() + ']');
    alert('mrk = [' + mrk.getPosition() + ']');
    alert('pos = [' + pos + ']');
    mrk.setPosition(pos);
    mp.setCenter(pos);
}
</script>
.........
<div id="nwfMap">
<iframe width=100% height=520 frameBorder=0 src="nwfMap.cgi" name="mapIframe"    id="mapIframe" scrolling=no></iframe>
</div>
........
</html>

“mapIframe” iframe 的相关部分(由 nwfMap.cgi 生成)

<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
<script type="text/javascript">
var mapNwf = new google.maps.Map(document.getElementById('mapCanvas'), {
    zoom: 8,
    mapTypeId: google.maps.MapTypeId.HYBRID
});
var latLngPre = new google.maps.LatLng(0.0, 0.0);
var markerMe = new google.maps.Marker({
    position: latLngPre,
    title: 'Me Here',
    map: mapNwf,
    draggable: true,
    animation: google.maps.Animation.DROP
  });
.........
</script>
.........
<div id="myInfoForm" style="display: none;">
<iframe border=1 width=100% height=200 align=center marginwidth=0 marginheight=0 seamless=seamless frameBorder=0 src="nwfSetInfo.cgi" name="myInfoIframe" id="myInfoIframe" scrolling=no></iframe>
</div>
.........

“myInfoIframe” iframe 的相关部分(由 nwfSetInfo.cgi 生成)

<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false">       </script>
<script type="text/javascript">
   parent.parent.move_it(13.7323691218542, 100.643479766271);
</script>
4

1 回答 1

0

现在问题已得到解决,方法是将“move_it()”函数定义从顶级 HTML 向下移动到中级 iframe“mapIframe”,并将“myInfoIframe”iframe 中的“move_it()”调用从

parent.parent.move_it(13.7323691218542, 100.643479766271); 

parent.move_it(13.7323691218542, 100.643479766271);

不知道为什么,但显然通过减少调用上下文级别,原始“可以读取但不能在映射变量上写入”问题得到了纠正。如果有人有很好的解释,想听听。谢谢。

于 2013-06-29T09:19:43.983 回答