Javascript 如果弹出窗口的url发生变化,如何收听弹出窗口的“消息”?

Javascript 如果弹出窗口的url发生变化,如何收听弹出窗口的“消息”?,javascript,Javascript,关于urlhttp://localhost:9001/mypage我有一个弹出窗口,其中包含某项服务的认证url const authUrl = 'http://someauthservice.com/someurl' const authPopup = window.open(authUrl, ''); authPopup.addEventListener('message', (event: any) => { console.log(event); });

关于url
http://localhost:9001/mypage
我有一个弹出窗口,其中包含某项服务的认证url

const authUrl = 'http://someauthservice.com/someurl'

const authPopup = window.open(authUrl, '');

authPopup.addEventListener('message', (event: any) => {
        console.log(event);
    });
当用户在该url上进行身份验证时,弹出窗口将重定向到我的回调url
http://localhost/callbackurl
,在我这边有一个简单的页面,上面有代码,显示窗口消息:

window.postMessage('hey ho', 'http://localhost:9001/mypage');
在此流中,事件侦听器将丢失事件并不运行回调:

  • 使用
    const authUrl='1'打开弹出窗口http://someauthservice.com/someurl'
    
  • 单击
    auth
    按钮
  • 重定向到我的url
  • 在这个流程中,它可以很好地工作:

  • 使用
    const authUrl='1'打开弹出窗口http://localhost/callbackurl“
  • 因此,如果在弹出窗口中加载了某个url,那么我的url将被加载,事件将不再被侦听,但是如果url没有更改,则事件将被侦听并触发回调

    url更改时如何保持事件侦听器


    更新:我的想法是允许用户在第三方服务上进行身份验证,然后当它用一些代码重定向到我的url时,我知道身份验证是成功的,因此我希望我的主机应用程序运行一些逻辑,例如,将一些变量从
    Pending
    更新为
    Verified

    如果授权服务重新加载其页面,则会出现一个全新的
    文档
    对象。打开弹出窗口后,您能更清楚地询问您想要什么吗?不,您无法获得有关url更改的通知,除非弹出窗口明确向您发送有关相同的消息事件。您可以尝试将消息发布到
    窗口。opener
    而不是
    窗口
    。然后你可以把监听器放在主窗口上。@Pointy它起作用了,谢谢@尖刻的你们应该把这变成一个答案!它帮助了我,但我几乎错过了它