'javascript:'前缀何时有效?

时间:2009-02-18 15:35:45

标签: javascript syntax

我知道您可以对<a>标记中的网址使用javascript:pseudo协议。但是,我注意到Firefox和IE都允许“javascript:”在<script>标记内的javascript代码之前。这是有效的语法吗?它是否会改变范围规则?

实施例: 我见过很多次了:

<a onclick="javascript:alert('hello world!');">Hello World!</a>

但这是合法/有效的语法并且它做了什么特别的事情:

<script type="text/javascript">
javascript:alert('hello world!');
</script>

4 个答案:

答案 0 :(得分:15)

href属性之外(它是协议说明符), name :只创建a label(例如可能与continue一起使用或break)。

请参阅:Do you ever need to specify javascript: in an onclick?

答案 1 :(得分:11)

如果您想将JavaScript放在链接的javascript:属性中,则需要href“协议。

<!-- does not work -->
<a href="alert('some text');">link</a>

<!-- does work -->
<a href="javascript:alert('some text');">link</a>

<!-- also works -->
<a href="#" onclick="alert('some text');">link</a>

据我所知(并且,如果我错了,有人纠正我),范围没有区别,但this有一个非常重要的区别。

<!-- does not work -->
<a href="alert(this.href);">link</a>

<!-- alerts "undefined" -->
<a href="javascript:alert(this.href);">link</a>

<!-- works as expected, alerts "<url>#" -->
<a href="#" onclick="alert(this.href);">link</a>

答案 2 :(得分:9)

要考虑的一件事是,如果我们做了像

这样的事情,我们的测试人员总会叮嘱我们

<a href='javascript:openwindowmethod("url");'> stuff </a>

而不是


<a href='url' onclick='return openwindowmethod(this.href);'> stuff </a>

第一种方法只有在你点击它时才有效,但如果你移动或者点击它,或者右击并在新窗口中打开则不会。

第二种方法可以支持所有这些,以及如果用户只是简单地点击链接就可以按照预期的方式运行。

答案 3 :(得分:0)

javascript: 语法可用于 URL 中的任何位置,并将以下字符串作为脚本执行。它是 part of the HTML spec 并且当前所有主要浏览器都支持 AFAIK。