IE 8的无效过程调用或参数

时间:2011-11-19 11:51:34

标签: javascript internet-explorer google-maps

我想在子窗口中访问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来创建实例吗?

1 个答案:

答案 0 :(得分:0)

我猜这与IE有关,并不真正支持在Windows之间传递对象。如果谷歌地图代码在任何时候试图在配置对象上调用JSON.stringify,那么我认为这个错误将被抛出,因为JSON.stringify无法将该对象识别为有效对象。

尝试将此代码移动到开启者页面,然后从子页面调用此方法,将该元素作为参数传递给(document.getElementById('map'))。