0

JavaScript でポップアップ ウィンドウを開く C# aspx Web アプリケーションがあります。ウィンドウ ハンドルを取得し、その値を配列に入れます。Web アプリケーションが閉じたら、ポップアップ ウィンドウを閉じたい。配列に問い合わせると、ウィンドウ ハンドルが配列内にないため、ウィンドウを閉じることができません。他のポップアップ ウィンドウ (Silverlight を含まない) は配列に残り、アプリケーションが終了すると閉じられるため、この動作は私には奇妙です。

最初は、PDFを含むポップアップウィンドウを閉じることができないなど、フレームで解決できるものだと思っていましたが、それに対する解決策はここではうまくいきませんでした。これは私がPDFで使用しなければならなかったものでした

質問: aspx のメイン ウィンドウを閉じるときに、Silverlight を含むポップアップ ウィンドウを閉じるにはどうすればよいですか?

いくつかの JavaScript コード:

var openedWindows = new Array();
function OpenNamedWindow(url, name, features, replace)
{
    var oWin = open(url, name, features, replace);
    // The Silverlight window object is within this array afterwards, and in subsequent calls
    // to this method
    openedWindows.push(oWin);
}

function CloseOpenedWindows()
{
    while (openedWindows.length > 0)
    {
        var window = openedWindows.shift();
        if(!window.closed)
            window.close();
    }
}

メインの aspx フォーム (省略形)

<html>
  <body onunload="CloseOpenedWindows();"> ... <body/>
</html>
4

2 に答える 2

0

含まれているjavascriptファイルが判明しました

var openedWindows = new Array();

は複数回ロードされていたため、どの配列を反復処理する必要があるかについて JavaScript が混乱していました。js ファイルが 1 回だけ読み込まれるようにすることで、問題が解決しました。

于 2012-06-08T15:12:50.030 に答える
0

c# や Silverlight に関係なく、このコードを試すことができます。変数「window」を宣言せず、close イベント「unload」を「window」に必ずアタッチします。

html:

<button id=openwindow>open new window</button>
<br />
<a href="http://jsfiddle.net/">go to another page and close this</a>

JavaScript :

// lib AttachEvent
function AttachEvent(obj, evt, fnc, useCapture) {
    if (!useCapture) useCapture = false;
    if (obj.addEventListener) {
        obj.addEventListener(evt, fnc, useCapture);
        return true;
    } else if (obj.attachEvent) return obj.attachEvent("on" + evt, fnc);
    else {
        MyAttachEvent(obj, evt, fnc);
        obj['on' + evt] = function() {
            MyFireEvent(obj, evt)
        };
    }
};
// lib AttachEvent

var windowOpenControl = {
    __cache: [],
    open: function(url, name, features, replace) {
        var w = window.open(url, name, features, replace);
        this.__cache.push(w);
    },
    closeAll: function() {
        try {
            var c = this.__cache.length;
            for (var i = 0; i < c; i++) {
                this.__cache[i].close();
            }
        } catch (e) {}
    }
};

var
button = document.getElementById('openwindow'),
    counter = 0;

AttachEvent(button, 'click', function() {
    windowOpenControl.open("http://www.google.com", 'mywindow_' + (counter++));
});

AttachEvent(window, 'unload', function() {
    windowOpenControl.closeAll();
});​

実行例

于 2012-06-06T15:55:56.467 に答える