window.location.replace() 无法重定向浏览器
Posted
技术标签:
【中文标题】window.location.replace() 无法重定向浏览器【英文标题】:window.location.replace() not working to redirect browser 【发布时间】:2012-02-12 12:21:38 【问题描述】:我用页面进行导航,但这段代码不起作用,有什么问题?
<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>
【问题讨论】:
没有一个答案似乎注意到每个 URL 中的括号在引号内,而当它需要在引号外时。否则使用 replace 方法在语法上是正确的。 【参考方案1】:不要为此使用.replace()
,直接赋值即可。
Example
$("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";
);
【讨论】:
我不得不说,使用 jsfiddle 的答案的价值必须是没有相同答案的 10 倍。 同意...只要我感觉到的不是讽刺。 有机会知道原因吗?replace()
或 assign()
有什么不好?
@green - location.assign()
实际上与设置location.href
相同(与直接设置location
相同)。其中每一个都向浏览器历史记录添加了一个新条目(后退按钮等)。 location.replace()
有一个非常有效且不同的用例,它会更改页面 url,但不会在浏览器历史记录中添加条目。见developer.mozilla.org/en-US/docs/Web/API/Window/location。
你不能直接访问window.location
,因为它是只读属性【参考方案2】:
您的代码有语法错误。您的结尾括号在引号内而不是在外...
试试:
<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>
并非所有浏览器都支持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>
【讨论】:
这是一个很好的答案。后备非常有用。【参考方案3】:在 Chrome 中重新加载同一页面时,我遇到了无法正常工作的问题。执行以下操作:
window.location.replace("/mypage1.aspx?type=abc"); //redirect to fake page
window.location.replace("/mypage.aspx?type=abc"); //redirect to same page
这有点像 hack,但这似乎是在 Chrome 中强制重新加载同一页面的唯一方法。 IE 和 FF 无需重定向到虚假页面即可工作。
【讨论】:
IIUC 这依赖于第一次重定向不会立即发生,因此第二行开始运行。但理论上,如果第一次发生得非常快,用户会卡在假网址上并看到错误页面。【参考方案4】:我在 Chrome 中遇到了这个问题。我试图从同一个域加载另一个页面,但使用的是绝对 URL(例如www.example.com/newurl
)。我将其更改为相对 URL (/newurl
),现在可以使用了。
我的想法是,这是一项安全功能,可防止用户通过某些 javascript 广告被重定向到恶意网站。
【讨论】:
【参考方案5】:我用过这个,效果很好
$(document).ready(function ()
$(document).keydown(function(e)
var url = false;
if (e.which == 37) // Left arrow key code
url = $('.prev').attr('href');
else if (e.which == 39) // Right arrow key code
url = $('.next').attr('href');
if (url)
window.location = url;
);
);
【讨论】:
【参考方案6】:这样使用:
window.history.pushState("", "", "new url");
window.location.reload();
【讨论】:
以上是关于window.location.replace() 无法重定向浏览器的主要内容,如果未能解决你的问题,请参考以下文章
window.location.href和window.location.replace的区别
window.location.replace和window.location.href的区别
window.location.href/replace/reload()/页面跳转+替换+刷新
使用 window.location.replace(response.path) [重复]