JavaScript issue in IE with window.opener

2019-01-29 05:07发布

问题:

I am trying to use the following JavaScript to check if a popup page is still open.

The parent page (calling page to open popup) is open but this code continues to fail. I am calling it from an aspx popup page that has a masterpage inside another masterpage. So the click event that eventually calls this script is an Edit Link in a Gridview in a content Placeholder which is in the upper most master page content Placeholder, not sure if that has anything to do with it. The script fires but it does not see the parent page as open and not closed.

if (window.opener != null && !window.opener.closed) { 
    alert(window.opener); 
    var val = window.opener.parentFunc(a); 
    alert(a); 
} 

This is an IE only problem, Firefox can identify the window.opener page. Tried multiple versions of IE all had issues, Firefox and Opera work though.

I actually used this alert statement....

alert(window.opener);

In IE returns Undefined.

In Firefox returned ObjectWindow.

回答1:

I believe this is a security restriction in IE. Take a look at this thread and see if it answers your problem:

http://social.msdn.microsoft.com/Forums/en/iewebdevelopment/thread/0c014e78-8d35-4df3-93da-7f6a30b4ed8b



回答2:

I got this to work by sending the script from VB.net like this....

Dim BrowserSettings As String = "status=no,toolbar=no, scrollbars =yes,menubar=no,location=no,resizable=no," & "titlebar=no, addressbar=no, width=650 ,height=800"
Dim URL As String = "testNewPage.aspx"
Dim scriptText1 As String = ("<script>javascript: var w = window.open('" & URL & "','_blank','" & BrowserSettings & "'); </script>")
ScriptManager.RegisterStartupScript(Me, GetType(Page), "ClientScript1", scriptText1, False)here

This isn't exactly what I wanted, but it seems to be working except now the popup page is not on top. Need to figure that part out.

I have been trying to apply focus, doesn't seem to work. Also, tried a modaless popup, that works but I lose the reference to the open window then.



回答3:

function getParentWindow(){
    var father = window.opener;
    if(father == undefined) {
       father=window.dialogArguments
    }

    return father;  
}