Javascript window.location.href vs单击锚定

Javascript window.location.href vs单击锚定,javascript,Javascript,单击以下各项之间有什么区别: <a href /> vs 调用window.location.href=… ?使用锚点可以指定目标属性,但使用window.location.href则不能。 通常,当用户希望将浏览器重定向到另一个位置时使用锚定,当使用javascript完成重定向时使用window.location.href。除了给出的其他答案,单击指定了href属性的元素将使浏览器导航到href中的URL,而不管是否启用了JavaScript。不要忘记,除了上述答案之外,还

单击以下各项之间有什么区别:

<a href />

vs

调用
window.location.href=…


使用锚点可以指定目标属性,但使用window.location.href则不能。
通常,当用户希望将浏览器重定向到另一个位置时使用锚定,当使用javascript完成重定向时使用window.location.href。

除了给出的其他答案,单击指定了
href
属性的
元素将使浏览器导航到
href
中的URL,而不管是否启用了JavaScript。

不要忘记,除了上述答案之外,还可以单击超链接(锚定标记)将触发该元素的
onclick
处理程序(如果有的话),而Javascript版本显然不会,只会更改窗口的位置


如果要模拟单击,可以从Javascript手动调用onclick处理程序,但必须记住手动执行此操作。在这方面,您发布的代码片段可能会有所不同,这可能是导致任何行为差异的原因。

如果可能,您应该在
window.location.href
上使用

  • 如果禁用了javascript,则所有链接都无法工作
  • 爬行器,比如GoogleBot,不会解释javascript,因此它们不会跟随您的任何链接
  • 它破坏了互联网。不,确实如此——万维网是建立在网页之间可发现的链接的基础上的。用非标准的。。呃,链接,违背了这个前提
  • 这会造成糟糕的用户体验:用户希望当他们将鼠标悬停在链接上时,能够访问某些信息:
    • 状态栏中显示的目的地(非常重要!)
    • 右键单击->复制链接位置
    • 单击鼠标中键->打开新选项卡
    • 使用
      window.location
      会破坏所有这些
  • 这容易多了
    设置
    window.location.href='thepage.html'
    与调用:

    window.open('thepage.html', '_self');
    
    也就是说,目标被限制在同一个窗口中,因为该窗口是location属性所在的窗口。这与单击没有目标属性的链接的效果相同:

    <a href="thepage.html">...</a>
    
    这与单击具有该目标的链接具有相同的效果:

    <a href="thepage.html" target="_blank">...</a>
    

    document.referer包含服务器和客户端对包含用户单击以访问新页面的链接的页面url的引用-
    脚本化的定位方法则不然。

    嗯,这是事实,但有点误导。在Javascript版本中,通过调用方法的对象隐式选择目标。window.location.href更改当前窗口,但mytarget.location.href将更改另一个窗口/框架(假设变量已正确声明)。无论如何,您不应该使用target属性。谁说的?无论如何,他要求不同意见,这是其中之一,所以继续投票,但这是正确的@德萨扎:你说得对,但他说的是窗户位置,不是别的什么。location@mck:是的,因此我在第一句话中用了软糖。严格地说,你是对的,但我对这个问题的解释是“javascript vs anchor clicking”;您提到的限制通常不适用于Javascript方法。(虽然我根本没有投票,但我认为你的答案不值得投否决票,只是澄清一下。:-)答案很好。我还将添加Shift+单击以在新窗口中打开,Ctrl+单击以在新选项卡中打开。我还将在该列表中添加可访问性,我不认为屏幕阅读器可以猜测JavaScript重定向,例如,当使用具有适当属性的HTML锚定时
    <a href="thepage.html" target="_blank">...</a>
    
    var w = window.open('about:blank', '_blank');
    w.location.href = 'thepage.html';