具有两个级别iframe上下文</position>的属性<position>的值无效

时间:2013-06-28 17:25:38

标签: properties

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

  

错误:属性值无效:(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()”  由cgi(nwfMap.cgi)提供的iframe(id:“mapIframe”)

“mapIframe”iframe cgi包含:  地图的var mapNwf  标记的var markerMe  由cgi(nwfSetInfo.cgi)提供的iframe(id:“myInfoIframe”)

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

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

mp.setCenter(pos);

我在这里遇到了“属性值无效...”错误。 紧接着的执行是:

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

没有显示正确的位置(lat / lng)值(地图中心和标记位置)

问题是,getCentergetPosition如何适用于相同的地图和标记变量,但setCentersetPosition失败了?

如果getCentergetPosition返回正确的数据,则表明没有可变的上下文问题,对吧?

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

是否与谷歌线的外观有关: 在顶部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>

1 个答案:

答案 0 :(得分: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);

不知道为什么,但显然通过减少调用上下文级别的东西得到纠正的原始“可读但不写地图变量”的问题。如果有任何人有一个很好的解释,想听听它。感谢。