DOJO:在window.opener上连接到活动

时间:2013-03-28 02:19:41

标签: javascript javascript-events dojo

我有一个页面打开一个弹出窗口(一个新的浏览器窗口,即window.open - 而不是一个dijit弹出窗口)。在这个新弹出窗口中创建的对象中,我想连接到位于该打开窗口中的对象触发的事件。

以下代码在我测试的所有浏览器中都能正常运行,除了IE8(以及可能的其他IE版本)之外,它会抛出错误“JScript object expected”:

this.parentObject = dojo.global.opener.parentObject;
dojo.connect(this.parentObject, "onUpdate", function() { alert('hello!'); });

我希望这只是一个范围问题而且可以很容易地解决,但是还没有任何运气。或者,我对如何处理这个问题持开放态度(我也使用了发布和订阅,但似乎遇到了同样的问题)。

提前致谢!

编辑:添加了一些代码来演示问题(无法创建一个jsfiddle,因为需要多个页面)。要复制问题,在通过index.html打开弹出窗口后,尝试并放大地图。

的index.html

    <!DOCTYPE html>
    <html>
    <head>
    <script src="http://serverapi.arcgisonline.com/jsapi/arcgis/3.4/"></script>
    <script>
    dojo.require("esri.map");

    function initClass()
    {
    dojo.declare("test.map", esri.Map, {
        constructor: function() { },
        init: function() {
            this.layer = new esri.layers.ArcGISDynamicMapServiceLayer("http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Specialty/ESRI_StatesCitiesRivers_USA/MapServer");
            this.addLayer(this.layer);
        },
        showLegend: function() {
            this.legend = dojo.global.open('popup.html','legend','left=10, top=10, height=700, width=290, status=no, resizable=yes, scrollbars=no, toolbar=no,location=no, menubar=no');
        }
    });
    }

    function init() { initClass(); MapHandler = new test.map("map"); MapHandler.init(); }

    dojo.addOnLoad(init);
    </script>
    </head>
    <body>
    <input type="button" id="showLegend" onclick='MapHandler.showLegend();' value="Legend" /><br />
    <br />
    <div id="map" style="width:600px; height:400px; border:1px solid #000;"></div>
    </body>
    </html>

popup.html

    <!DOCTYPE html>
    <html>
    <head>
    <script src="http://serverapi.arcgisonline.com/jsapi/arcgis/3.4/"></script>
    <script>
    dojo.require("esri.dijit.Legend");

    function initClass()
    {
    dojo.declare("test.legend", null, {
    map: null,
    legend: null,
    constructor: function(divid) {
        this.map = dojo.global.opener.MapHandler;
    },
    init: function() {
        this.legend = new esri.dijit.Legend({map: this.map},"legend");
        this.legend.startup();
        dojo.connect(this.map, "onUpdateEnd", function() { alert('hello!'); });
    }
    });
    }

    function init() { initClass(); MapLegend = new test.legend(); MapLegend.init(); }

    dojo.addOnLoad(init);
    </script>
    </head>
    <body>
    <div id="legend"></div>
    </body>
    </html>

0 个答案:

没有答案