我想在子窗口中访问opener的类(由window.open创建),w3c浏览器工作正常,但在IE 8中失败。
我也测试了iframe,它在所有浏览器中都运行良好。
此示例的目的是减少谷歌地图载荷
父窗口
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script src="http://maps.google.com/maps/api/js?sensor=false&language=cn"></script>
<script>
function openIEWin(){
var TRACK = window.open('child.html?t='+new Date().getTime(),'');
TRACK.focus()
}
</script>
</head>
<body style="background-color:#cfc;" class="abc">
<button onclick="openIEWin()">New Window</button>
<!--iframe page can successfully access and invoke the parent window's class-->
<iframe src="b.html"></iframe>
子窗口:
<!DOCTYPE html>
<html>
<head>
</head>
<body onload="init()">
<div id='map' style="width:600px;height:480px;"></div>
<script>
function init(){
var google= window.opener.google;
//cause an error
var latlng = new google.maps.LatLng(-34.397, 150.644);
var myOptions = {
zoom: 8,
mapTypeId: google.maps.MapTypeId.ROADMAP,
center:latlng
};
//cause an error
var map = new google.maps.Map(document.getElementById('map'),myOptions);
}
</script>
错误信息非常典型:
无效的程序调用或参数
然后我尝试了IE的window.showModelessDialog,但只是遇到了同样的错误
那么如何解决这个问题呢?
看来我们不能用new来创建实例吗?
答案 0 :(得分:0)
我猜这与IE有关,并不真正支持在Windows之间传递对象。如果谷歌地图代码在任何时候试图在配置对象上调用JSON.stringify,那么我认为这个错误将被抛出,因为JSON.stringify无法将该对象识别为有效对象。
尝试将此代码移动到开启者页面,然后从子页面调用此方法,将该元素作为参数传递给(document.getElementById('map')
)。