为什么 window.location.href= 不使用 Safari 转发到页面?

Why isnt window.location.href= not forwarding to page using Safari?

我的站点允许用户通过 Fb 按钮登录,为此我使用 FB / Parse.com JDK https://parse.com/docs/js/guide#users-facebook-users

一旦用户被识别,下面的代码就会让用户登录并将他们转发到 url。这在 Chrome 下按预期工作,但在使用 Safari 时无法工作,该页面仅停留在空白的 fb.html 页面上

我发现

存在一些历史问题

window.location.href=

但是,找不到适用于我的解决方案的修复程序。有人知道解决这个问题的方法吗?

Parse.FacebookUtils.logIn(null, {
    success: function(user) {
        if (!user.existed()) {

        } else {
            window.location.href="user_home.html";

        }
    },
    error: function(user, error) {

    }
});

我认为你需要使用...

window.location = 'user_home.html';

在所有浏览器中的最佳工作方式:

setTimeout(function(){document.location.href = "user_home.html";},250);

我在 safari 上也遇到过这种情况,我发现了这个 post,但我找到了另一个解决方案,我想添加它并提供大量浏览器支持。不要替换当前位置,而是使用位置对象上名为 assign()

的方法
document.location.assign(document.location.origin + "/user_home.html")

这也有效

location.assign(location.origin + "/user_home.html")

在 Chrome 和桌面和移动 iOS 设备上的 Safari 中测试

参考: https://www.w3schools.com/jsref/met_loc_assign.asp

当我解决这个问题时,我使功能在任何 Safari 以及包括移动浏览器在内的所有浏览器上都能正常工作:

function windowLocation(url){
    var X = setTimeout(function(){
        window.location.replace(url);
        return true;
    },300);

    if( window.location = url ){
        clearTimeout(X);
        return true;
    } else {
        if( window.location.href = url ){
            clearTimeout(X);
            return true;
        }else{
            clearTimeout(X);
            window.location.replace(url);
            return true;
        }
    }
    return false;
};

有点"dirty"的解决方案,但让您能够在任何情况下重定向您的页面。

我想检测主页,但 iphone 和 safari 遇到了同样的问题。

我只是在着陆页中添加了一个名为“home”的 class,然后只需将此 class 检查为

        if (document.querySelector('.home') !== null) {         
             // the conditions comes here
        }

详情见http://toihid.com/how-to-detect-home-page-in-iphone-and-safari/