【问题标题】:window.location.href doesn't redirectwindow.location.href 不重定向
【发布时间】:2013-03-23 10:43:30
【问题描述】:

我知道这是一个讨论很多的问题,但我不明白为什么它对我不起作用。

这是我的功能:

function ShowComments(){

 alert("fired");
 var movieShareId = document.getElementById('movieId');
 //alert("found div" + movieShareId.textContent || movieShareId.innerText);
 //alert("redirect location: /comments.aspx?id=" + movieShareId.textContent || movieShareId.innerText + "/");
 window.location.href = "/comments.aspx?id=" + movieShareId.textContent || movieShareId.innerText + "/";
 var newLocation = window.location;
 //alert("full location: " + window.location);

}

如果我没有注释警报,或者如果我打开了 Mozilla 的 bugzilla,它可以正常工作,否则它不会重定向到其他页面。

有什么想法吗?

【问题讨论】:

  • `var newLocation = window.location;` 有什么意义? window.location 更改后不应执行任何行。
  • 你是如何调用函数的?您当时是否正在做其他可能会干扰位置变化的事情?

标签: javascript dom-events window.location


【解决方案1】:

如果您通过提交按钮调用此函数。这可能是浏览器不重定向的原因。它将运行函数中的代码,然后提交页面而不是重定向。在这种情况下,请更改按钮的类型标签。

【讨论】:

  • 谢谢。帮助很大。我的按钮“类型”为“提交”。将其更改为“重置”并且有效。
  • 正是,这类问题,往往是由于点击或“进入”事件冒泡,并提交表单。
  • 你绝对让我开心。 12 小时的谷歌和 stackoverflow 搜索。顶部。
  • 有趣的是,即使我的按钮不是submit,它也不起作用,因为它在表单中。我不得不把它移到外面然后它才起作用。
  • 这是我的问题,按钮没有类型调用,输入 type='button' 解决了这个问题。谢谢!
【解决方案2】:

从这个答案,

window.location.href not working

你只需要添加

return false;

在函数的底部

【讨论】:

    【解决方案3】:

    这里的解决方案: http://www.codeproject.com/Questions/727493/JavaScript-document-location-href-not-working

    document.location.href = 'Your url',true;
    

    【讨论】:

      【解决方案4】:

      缺少一些括号。

      改变

       window.location.href = "/comments.aspx?id=" + movieShareId.textContent || movieShareId.innerText + "/";
      

       window.location = "/comments.aspx?id=" + (movieShareId.textContent || movieShareId.innerText) + "/";
      

      + 相比,|| 没有优先级。

      window.location 分配之后也删除所有内容:此代码不应在页面更改时执行。

      注意:您不需要设置location.href。设置location就足够了。

      【讨论】:

      • @user2235124 我认为您的页面还有其他问题。而且在位置分配之后你有一些代码的事实让我怀疑更大的逻辑问题。你能建立一个fiddle 来显示你的问题吗?
      【解决方案5】:

      确保您没有在 URL 末尾发送“#”。就我而言,这阻止了 window.location.href 工作。

      【讨论】:

      • 是的,这里也一样,没有任何本地人可以解决这个问题吗?
      • 请注意,如果您在任何查询字符串参数之前或不包含任何查询字符串参数,则带有哈希的重定向将起作用。
      【解决方案6】:

      您不能使用window.location.replacedocument.location.href 或任何您喜欢的普通javascript 方法将页面重定向到自身

      因此,如果您从后端动态添加重定向路径,或者从数据标签中提取它,请确保在某个阶段检查重定向到当前页面。可以这么简单:

      if(window.location.href == linkout)
      {
          location.reload();
      }
      else
      {
          window.location.href = linkout;
      }
      

      【讨论】:

        【解决方案7】:

        window.location.replace 是模拟重定向的最佳方式:

        function ShowComments(){
            var movieShareId = document.getElementById('movieId');
            window.location.replace("/comments.aspx?id=" + (movieShareId.textContent || movieShareId.innerText) + "/");
        }
        

        更多关于为什么window.location.replace 是最好的javascript 重定向的信息可以在right here 找到。

        【讨论】:

        • 您链接到的答案中的重点是关于历史上的痕迹。我看不出它有什么关系。
        【解决方案8】:

        我会给你一个很好的函数来解决这个问题:

        function url_redirect(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;
        };
        

        这是window.location 问题的通用解决方案。一些浏览器会遇到window.location.href 的问题,有时也会发生window.location 失败的情况。这就是为什么我们在任何情况下都使用window.location.replace(),并为“最后一次尝试”使用超时。

        【讨论】:

          【解决方案9】:

          在我的情况下,它在设置时间间隔后对所有浏览器都按预期工作。

          setTimeout(function(){document.location.href = "myNextPage.html;"},100);
          

          【讨论】:

            【解决方案10】:

            window.location.href 无法在 Android 中运行。 我清除了 Android Chrome 中的缓存,它工作正常。 建议在参与各种编码之前先尝试一下。

            【讨论】:

              猜你喜欢
              • 2021-10-10
              • 2016-10-20
              • 2023-03-11
              • 2015-12-13
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2019-01-13
              • 2022-11-15
              相关资源
              最近更新 更多