我知道您可以对<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>
答案 0 :(得分:15)
在href
属性之外(它是协议说明符), name :只创建a label(例如可能与continue
一起使用或break
)。
答案 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。