【问题标题】:Why isnt window.location.href= not forwarding to page using Safari?为什么 window.location.href= 不使用 Safari 转发到页面?
【发布时间】:2015-07-04 17:11:49
【问题描述】:

我的网站允许用户通过 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.replace('user_home.html')

标签: javascript parse-platform facebook-javascript-sdk


【解决方案1】:

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

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

【讨论】:

  • 另外值得检查的是确保 Safari 没有阻止弹出窗口
  • @Dano007。这对我有用。但是在超时和没有超时之后设置 location.href 有什么区别?
  • 此修复停止为我工作。我怀疑 safari 已更新,修复停止工作。
  • @stanislaw 同样在这里,这个修复程序最近也停止了对我的工作。接到客户的电话,说他的 iphone 现在在使用 safari 时没有得到重定向。有些人说要启用弹出窗口,但如果每个人都需要禁用它,那就违背了目的。如果有人提出解决方案,我发布了一个新线程。 stackoverflow.com/questions/59778280/…
【解决方案2】:

我在 safari 上也遇到过这种情况,并找到了这篇文章,但找到了另一个我想添加的解决方案,并支持大量浏览器。不要替换当前位置,而是使用位置对象上的方法 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

【讨论】:

    【解决方案3】:

    我认为你需要使用...

    window.location = 'user_home.html';
    

    【讨论】:

      【解决方案4】:

      当我解决这个问题时,我使功能在任何 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;
      };
      

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

      【讨论】:

        【解决方案5】:

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

        我只是在登录页面中添加了一个名为“home”的类,然后将这个类检查为

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-11-13
          • 1970-01-01
          • 2012-02-16
          • 2015-09-13
          • 2017-06-10
          • 1970-01-01
          • 2012-11-15
          • 2016-06-17
          相关资源
          最近更新 更多