在Android chrome上,window.opener为null(但在隐身模式下则不为空)

Pab*_*123 5 javascript oauth instagram mobile-chrome

我正在打开一个新窗口来完成这样的Instagram oauth:

var newWindow = window.open(url, 'Instagram Login', 'scrollbars=yes, width=' + w + ', height=' + h + ', top=' + top + ', left=' + left);
Run Code Online (Sandbox Code Playgroud)

其中url只是给定应用程序的oauth路径。通过身份验证后,以下代码将查找在应用程序端定义的函数以触发成功回调:

if (window.opener && window.opener.foo) {
    window.opener.foo("photo:social:login:success", gon.social_profile);
}
Run Code Online (Sandbox Code Playgroud)

这在台式机和ios上都可以完美运行,但是android chrome告诉我window.opener为null,这意味着永远都无法实现回调。

奇怪的是,在android chrome中的隐身窗口上尝试完全相同的流程,可以正常工作。window.opener指向原始窗口,并且回调函数已成功触发。

我已经尝试parent.window.opener过,以及top.window.opener用于打开弹出窗口的代码都位于iframe中,但似乎没有什么区别。有什么理由让android在这里有所不同?