Find window previously opened by window.open

后端 未结 5 1682
攒了一身酷
攒了一身酷 2020-12-05 04:52

We\'ve got the following situation, running from a single domain:

Page A uses window.open() to open a named window (a popup player). window.open()

相关标签:
5条回答
  • 2020-12-05 05:32

    This should work. Add this code in the popup:

    function updateOpener() {
        if (window.opener)
            window.opener.document.myPopupWindow = window;
        else
            setTimeout(updateOpener, 100);
    }
    
    updateOpener(); 
    

    And this in onload of the parent window. To make sure myPopupWindow have been set wait 100 ms before accessing it.

    setTimeout(function() {
        if (document.myPopupWindow) 
            document.myPopupWindow.focus();
    }, 100);
    
    0 讨论(0)
  • 2020-12-05 05:34

    AFAIK, no there isn't..

    A kind-of-dirty-but-i-guess-it-will-work hack would be to periodically reset the reference on the parent window from within the popup using window.opener, with something like this code:

    
        setInterval(function() {
            if(window.opener) {
                window.opener.document.myPopupWindow = window
            }
        }, 100)
    
    

    In the parent window, you'll be able to access document.myPopupWindow, even after a reload (well, 100ms after the reload). This should work cross browser.

    0 讨论(0)
  • 2020-12-05 05:44

    If all the windows share a common Url origin you can register a ServiceWorker and then access all windows from the ServiceWorker: https://developer.mozilla.org/en-US/docs/Web/API/Clients

    AFAIK You won't be able to pass a reference to other windows from WorkerService to your window but you can establish communications with the ServiceWorker via

    • https://developer.mozilla.org/en-US/docs/Web/API/Worker/postMessage
    • https://developer.mozilla.org/en-US/docs/Web/API/Client/postMessage
    0 讨论(0)
  • 2020-12-05 05:48

    Try this:

    var playerUrl = 'http://my.player...';
    var popupPlayer= window.open('', 'popupPlayer', 'width=150,height=100') ;
    if(popupPlayer.location.href == 'about:blank' ){
        popupPlayer.location = playerUrl ;
    }
    popupPlayer.focus();
    

    It will open a blank window with a unique name. Since the url is blank, the content of the window will not be reloaded.

    0 讨论(0)
  • 2020-12-05 05:51

    Actually what you did is destroy the parent (page A) of the created window (Popup), so it has no more reference to the original parent therefore you can't get a direct reference.

    The only solution I can think of is using a browser that offers you added javascript capability to cycle through active windows (tabs) and find one that has a special property (ie: your reloaded page A) that gets recognized by the popup.

    Unfortunately I guess only firefox has some added capability or extension that gives you this flexibility. (it is also a security risk though)

    0 讨论(0)
提交回复
热议问题