pej*_*ohn 5 https redirect google-chrome http
我真的很难过这一点,所以如果有人能提供线索,我真的很感激。
这是我的网站(内置导轨):http : //floating-autumn-3174.herokuapp.com/
当有人试图通过 Facebook 或 Twitter 上的链接访问该网站时,基本上会加载一个新标签,但随后会立即关闭。这只发生在 Chrome 中。在 Firefox 中工作得很好。
如果我右键单击该链接,然后选择“在新选项卡中打开”,则加载正常。
如果我右键单击并复制链接,它就可以正常工作。
我认为这可能与 SSL 重定向有关,但我使用我的登台环境(无 SSL)进行了测试,它运行良好。
所以基本上这种自动关闭只发生在 Chrome 和点击加载新标签的链接时。
任何线索发生了什么或我如何才能更好地解决这个问题?
编辑
好的,在查看了我们包含的 javascript 之后,我相信我已经找到了问题所在。它涉及一些我们用来处理弹出窗口的 JS。首先让我解释一下我们正在尝试做什么。我们通过 Facebook 进行身份验证。当用户单击“通过 Facebook 登录”时,将启动一个弹出窗口并进行身份验证。成功后,弹出窗口关闭,主窗口以登录状态刷新。这一切正常,但我意识到弹出窗口关闭代码正在杀死所有其他新窗口。这是下面的完整代码片段:
function popupCenter(url, width, height, name) {
var left = (screen.width/2)-(width/2);
var top = (screen.height/2)-(height/2);
return window.open(url, name, "menubar=no,toolbar=no,status=no,width="+width+",height="+height+",toolbar=no,left="+left+",top="+top);
}
$(document).ready(function(){
$("a.popup").click(function(e) {
popupCenter($(this).attr("href"), $(this).attr("data-width"), $(this).attr("data-height"), "authPopup");
e.stopPropagation(); return false;
});
if(window.opener) {
window.opener.location.reload(true);
window.close()
}
});
Run Code Online (Sandbox Code Playgroud)
最后一个 if 语句是我认为导致问题的原因。我是一个严肃的 JS 菜鸟,所以我不知道如何解决这个问题。基本上,如果链接用于弹出窗口,我只希望最后一个条件触发。我怎么能这样做呢?再次感谢所有的帮助。
编辑 2
我继续下面 Rob 的回答,并认为它有效,但实际上遇到了一个我希望得到帮助的边缘情况。显然,当用户第一次通过 Facebook 身份验证时,window.name 不再是“authPopup”。我认为那是因为弹出窗口实际上经历了多个步骤,并以请求权限的屏幕结束。在这种情况下,弹出窗口不会关闭。在任何后续登录时,弹出窗口都会关闭,因为它不需要执行所有步骤并且“authPopup”条件保持为真。我将如何处理这个问题?
编辑 3
我已经找到了一个我认为有效的解决方案。我首先根据 Rob 的建议查看了 Facebook 身份验证屏幕的窗口名称,但发现它每次都会发生变化并且不容易预测。所以我决定走全局变量路线。这是我使用的最终代码,以防其他人发现它有用。
function popupCenter(url, width, height, name) {
var left = (screen.width/2)-(width/2);
var top = (screen.height/2)-(height/2);
popupValue = "on";
return window.open(url, name, "menubar=no,toolbar=no,status=no,width="+width+",height="+height+",toolbar=no,left="+left+",top="+top );
}
$(document).ready(function(){
$("a.popup").click(function(e) {
popupCenter($(this).attr("href"), $(this).attr("data-width"), $(this).attr("data-height"), "authPopup");
e.stopPropagation(); return false;
});
if(window.opener && window.opener.popupValue === 'on') {
delete window.opener.popupValue;
window.opener.location.reload(true);
window.close()
}
});
Run Code Online (Sandbox Code Playgroud)
只需检查财产的价值window.name:
if (window.opener && window.name === 'authPopup') {
window.opener.location.reload();
window.close();
}
Run Code Online (Sandbox Code Playgroud)
此外,您还可以验证打开程序的 URL,以便其他网站在名为“authPopup”的窗口中打开您的网站时不会刷新。由于页面位于同一域,您还可以在原始窗口中设置一个变量,以便当用户导航到另一个页面时页面不会刷新。
| 归档时间: |
|
| 查看次数: |
4189 次 |
| 最近记录: |