为啥在超链接中使用 window.location?

Posted

技术标签:

【中文标题】为啥在超链接中使用 window.location?【英文标题】:Why use window.location in a hyperlink?为什么在超链接中使用 window.location? 【发布时间】:2011-03-29 16:29:27 【问题描述】:

我正在浏览一个我接管的网站,并在其中一个页面中看到了这个部分:

<a href="javascript:window.location='<%=GetSignOutUrl()%>';">
  // img
</a>

显然,任何曾在没有 javascript 的情况下使用过该网站的人都无法正常注销(令人惊讶的是,从未出现过这种情况)。

所以首先想到的是

<a href="<%=GetSignOutUrl()" onclick="javascript:window.location='<%=GetSignOutUrl()%>';">
   // img
</a>

然后我意识到我根本不知道为什么要保留 javascript 调用。我只是有点困惑,为什么在常规链接本来可以正常工作的情况下首先会这样写。与普通链接相比,window.location 有什么好处?

这也是我在网站上看到的唯一一个地方(到目前为止)。

编辑:我之前的程序员非常称职,这就是为什么我想知道是否有什么我没有考虑到,或者他只是做了一个简单的疏忽。

【问题讨论】:

可能是试图在浏览器状态栏中隐藏 URL? @Russ,URL 不会像任何普通 html 一样出现在呈现的 HTML 中吗?因此,当点击时,浏览器会像往常一样在地址栏中显示 URL? 这是唯一的链接,还是他们因此而这样做? @DaveDev - 它肯定会在源代码中,但是如果这个网站是内部的,用户可能会被锁定并且无法查看源代码或保存页面(我有过这种经验在过去)。我在这里冒险猜测 :) @Brandon - 这是一个内部网络应用程序吗? 我也在猜测!! ...相信我,这是我必须阅读的一些代码的日常练习! :-) 【参考方案1】:

有三种可能:

    开发人员试图在发送用户之前强制使用 Javascript。 开发人员试图屏蔽链接中的 href。可能是这样不能有效爬取,或者状态栏有关系。 开发者是个不守规矩的人。

我会删除它,看看它是否坏了。但话说回来,我是个墨守成规的人。

【讨论】:

我同意第 2 点,条件是将第 3 点的“不守规矩”改为“不称职”(我喜欢创造具有讽刺意味的术语 :-))......无论如何我同意第二点的原因是他们可能不知道 Robots.txt 文件是什么,这是他们可以阻止 Google 不断尝试注销的唯一方法?【参考方案2】:

我的猜测是,如果开发人员不知道要考虑客户端执行 javascript 的能力,他们可能不知道什么是 href。这不太可能,但并非不可能。

【讨论】:

【参考方案3】:

可能是因为可能使用了多个域,而代码中哪一个不清楚或不容易获得?

【讨论】:

但无论如何,&lt;%=GetSignOutUrl()%&gt; 都会考虑这一点。 &lt;%=GetSignOutUrl()%&gt; 只返回一个 URL(看起来),因为 javascript:window.location 需要一个 URL 才能运行 是的,你也可以有一个相对的退出链接,它不会打扰域。【参考方案4】:

这可能是为了向搜索引擎隐藏链接。

【讨论】:

以上是关于为啥在超链接中使用 window.location?的主要内容,如果未能解决你的问题,请参考以下文章

react中为啥不window.location.href来跳转,还要用react-router来跳转

为啥移动端 window.location.href 不起作用

为啥 window.location.search 为空

为啥我在js里面用window.location.reload(true);不刷新页面?

如果超链接做同样的事情,window.location.assign 有啥用?

javascript进行重定向页面时用window.href.location为啥有时不传参数?