为什么在Safari浏览器中使用window.location.href不能将页面重定向?

13

我的网站允许用户通过Fb按钮登录,我使用FB / Parse.com JDK完成这项工作。 https://parse.com/docs/js/guide#users-facebook-users

一旦用户被识别,以下代码将记录用户并将其转发到一个网址。在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) {

    }
});

1
尝试使用 window.location.replace('user_home.html') - marekful
6个回答

17

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

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

1
还值得检查的是确保Safari没有阻止弹出窗口。 - Dano007
1
@Dano007。这个对我有用。但是设置location.href超时和没有超时有什么区别呢? - kumarmo2
1
这个修复方法对我不再起作用了。我怀疑Safari已经更新,导致这个修复方法失效了。 - Stanislav
@stanislaw 我也是,最近这个修复方法也无法使用了。有客户打电话告诉我说他的iPhone在使用Safari时无法获取重定向。有些人建议启用弹出窗口,但这有点违背初衷,如果每个人都需要禁用它。如果有人已经找到解决方案,我已经发布了一个新的主题。 https://dev59.com/C1IH5IYBdhLWcg3wZtbI?noredirect=1#comment105701505_59778280 - Brandon Nadeau

6

我也在Safari上遇到了这个问题,找到了这篇文章,但我发现了另一个解决方法,它有很好的浏览器支持。 不要替换当前位置,而是使用location对象上称为assign()的方法。

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

这也是有效的

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

已在桌面端和移动iOS设备上的Chrome和Safari中进行测试。

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


2

我认为你需要使用...

window.location = 'user_home.html';

0

可能是因为您在此之前进行了某些操作。换句话说,您的点击事件处理程序中第一步必须是window.location.href = "https://example.com";


0
当我遇到这个问题时,我编写了一个函数,在任何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;
};

这是一个有点“不太优雅”的解决方案,但可以让您在任何情况下重定向页面。


-1

我想检测主页,但在iPhone和Safari上遇到了相同的问题。

我只需在着陆页面中添加一个名为“home”的类,然后检查这个类即可。

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

请参阅http://toihid.com/how-to-detect-home-page-in-iphone-and-safari/中的详细信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接