【问题标题】:What's the point of "javascript:" in code (not URLs)? [duplicate]代码(不是 URL)中的“javascript:”有什么意义? [复制]
【发布时间】:2013-09-02 09:28:53
【问题描述】:

我偶然发现了一些我以前从未真正见过的奇怪的东西:

javascript:a=a+10;

上面的行似乎是正确的,并且可以愉快地评估(至少在 Firefox 中),就像 javascript: 部分从未存在一样。

虽然我确实了解在 DHTML 的黑暗时代使用的旧 javascript:void(...) 样式 <a href=".."/> 的用途,但我只是想不出这个前缀在纯 JavaScript 代码中的任何有用用法。

它有什么特殊含义吗?

【问题讨论】:

  • 我不能代表所有人,但我从未在纯 JS 代码中看到过这一点。能给我举个例子吗? (它可能工作得很好,但它不应该有任何影响,所以我很想知道你在哪里看到的
  • 你在哪里看到的?
  • 你在哪里写的?它在锚标签中还是在哪里?
  • 不只是javascript:,任何东西都可以作为标签,后面加“:”。请参阅here 打破标签的小示例。

标签: javascript


【解决方案1】:

javascript:”是label。它应该被用来识别一个循环,这样你就可以使用“break javascript;”来打破它,但在这里被滥用了。给不是循环的语句添加标签是无害的,但可能不是一个好主意。

【讨论】:

  • 官方(从 IANA 开始)如何称其为标签很奇怪,这些链接前缀被称为 URI Scheme。的确,它没有在 IANA 正式注册,但仍应使用这种命名约定。
  • 除非问题表明,它不在 URI 中,而是在纯代码中。正如昆汀在下面所说的,这几乎可以肯定是由于有人在不了解他们在做什么的情况下复制和粘贴造成的。
  • 这种语言结构在网络发明之前至少 3 年就被称为 标签。它与网络完全没有任何关系。它与 URI 无关。那么,为什么要使用这个术语呢?
  • @JörgWMittag 我觉得 Javascript 确实实现了 label 很愚蠢(这被 软件工程道德兄弟会骑士团 认为不好)但是goto 没有。
  • 标签的使用允许标记“中断”,我认为 KotSEMB 仍然很酷。 OUTER: while (1) { INNER: while (1) { break OUTER; }}
【解决方案2】:

它在语法上是有效的(它是一个label)但没用。是cargo culting,是别人不理解就复制粘贴代码造成的。

【讨论】:

  • +1 用于货物培养链接:)。复制/粘贴人员似乎在负责内部 web 应用程序设计的公司员工中很普遍。
  • 这篇关于编程中货物崇拜的 wiki 文章不是更贴近现场吗? [1]en.wikipedia.org/wiki/Cargo_cult_programming
【解决方案3】:

JavaScript 也可以在HTML Application (HTA) 中的网页之外使用。在 HTA 中,可以混合使用 VBScript 和 JavaScript。当您在应用程序中使用脚本时,如下所示,脚本语言会自动设置为 VBScript。

<SCRIPT LANGUAGE='VBScript'> MsgBox 'Hi!'</SCRIPT>

因此,具有 JavaScript onclick 事件的元素(如下所示)将导致错误。

<a id="myLink" href="#" onclick="MyFunction();return false;">Click me!</a>

您可以通过将语言显式设置为 JavaScript 来解决此问题

<a id="myLink" href="#" onclick="javascript:alert('Javascript Executed!');return false;">Click me for Javascript!</a>

或者在 VBScript 中通过

<a id="myLink" href="#" onclick='vbscript:msgbox "VBScript Executed!"'>Click me for VBScript!</a>

注意:我知道这是一个极端情况,但它是我在创建混合语言 HTA 时遇到的 javascript: 标签的实际用法(在这种情况下我们仍然可以称它为标签吗?)。

【讨论】:

  • 有点离题,因为最初的问题是关于在纯 javascript 代码中使用标签,但是看看 Internet Explorer 有多么奇怪还是很有趣的 ;)。
【解决方案4】:

我同意它作为标签的无用性,但在某些情况下它仍然有用。例如,您需要从地址栏中执行一个简短的 sn-p 或编写一个书签。但在这种情况下,javascript: 会更像一个伪协议方案。

【讨论】:

  • 这实际上完全不同。 URL 开头的javascript: 使浏览器将 URL 的其余部分作为 JavaScript 执行。 javascript: 在一行JavaScript 代码 的开头是一个名为“javascript”的标签,就像foobar: 是一个名为“foobar”的标签一样。它们完全不相关,出现在不同的环境中,但看起来很相似。 developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-08
  • 2013-05-15
  • 2011-06-05
  • 2023-03-19
  • 2010-10-13
  • 2018-04-19
相关资源
最近更新 更多