window.location.replace()无法重定向浏览器

Abu*_*yah 12 javascript jquery redirect location replace

我用页面导航,但这段代码不起作用,有什么问题?

<script>
$(document).ready(function() {
$("body").keydown(function(event) {
  if(event.keyCode == 37) { // left
    window.location.replace("http://newsii.abudayah.com/photo/2)";  }
  else if(event.keyCode == 39) { // right
    window.location.replace("http://newsii.abudayah.com/photo/31)";  }
});
});
</script>
Run Code Online (Sandbox Code Playgroud)

jon*_*ohn 29

不要.replace()用于此,只需直接赋值.

$("body").keydown(function(event) {

    if(event.keyCode == 37) { // left
        window.location = "http://newsii.abudayah.com/photo/2";
    }
    else if(event.keyCode == 39) { // right
        window.location = "http://newsii.abudayah.com/photo/31"; 
    }

});
Run Code Online (Sandbox Code Playgroud)

  • @green - `location.assign()`实际上与设置`location.href`相同(这与直接设置`location`相同).其中每个都为浏览器历史记录添加了一个新条目(后退按钮等).`location.replace()`有一个非常有效且不同的用例,它改变了页面URL,但没有在浏览器历史记录中添加条目.请参阅https://developer.mozilla.org/en-US/docs/Web/API/Window/location. (5认同)
  • 我必须说,jsfiddle的答案必须比没有的答案值高10倍. (4认同)
  • 有机会知道为什么吗?`replace()` 或 `assign()` 有什么不好? (3认同)

小智 20

您的代码有语法错误.你的最后一个括号是在引号里面而不是在...之外

尝试:

<script>
$(document).ready(function() {
$("body").keydown(function(event) {
  if(event.keyCode == 37) { // left
    window.location.replace("http://newsii.abudayah.com/photo/2");  }  
  else if(event.keyCode == 39) { // right
    window.location.replace("http://newsii.abudayah.com/photo/31");  }
});
});
</script>
Run Code Online (Sandbox Code Playgroud)

并非所有浏览器都支持window.location.replace.始终支持分配位置值.但是,使用替换而不是分配位置值的原因是您不希望当前URL显示在历史记录中,或者在使用后退按钮时显示.由于这并非总是可行,您只需要满足于可能的情况:

<script>
$(document).ready(function() {
$("body").keydown(function(event) {
  if(event.keyCode == 37) { // left
    try { window.location.replace("http://newsii.abudayah.com/photo/2"); } 
    catch(e) { window.location = "http://newsii.abudayah.com/photo/2"; }
  }
  else if(event.keyCode == 39) { // right
    try { window.location.replace("http://newsii.abudayah.com/photo/31"); } 
    catch(e) { window.location = "http://newsii.abudayah.com/photo/31"; }
  }
});
});
</script>
Run Code Online (Sandbox Code Playgroud)


Ewa*_*ger 5

Chrome 中重新加载同一页面时,我遇到了它无法工作的问题。做以下工作:

   window.location.replace("/mypage1.aspx?type=abc"); //redirect to fake page
   window.location.replace("/mypage.aspx?type=abc");  //redirect to same page
Run Code Online (Sandbox Code Playgroud)

这有点骇人听闻,但这似乎是在 Chrome 中强制重新加载同一页面的唯一方法。IE 和 FF 无需重定向到假页面即可工作。


use*_*723 5

我在 Chrome 中遇到了这个问题。我试图从同一个域加载另一个页面,但使用的是绝对 URL(例如www.example.com/newurl)。我将其更改为相对 URL ( /newurl),现在可以使用了。

我的想法是,这是一项安全功能,可防止用户通过某些 javascript 广告被重定向到恶意站点。