javascript:伪协议
首先来一个需求:希望从当前页面转跳到掘金首页,soeasy!
<a href="https://juejin.cn/">掘金</a>
但是使用伪协议,我们可以使用window.open完成相同的需求:
<a href="javascript:window.open('https://juejin.cn/')">掘金</a>
伪协议听上去不太好理解,大家比较熟悉的协议,应该就是http协议,当我们在浏览器地址上输入juejin.cn/ 的时候,会去请求数据。那同为协议,你当然也可以在浏览器地址上输入javascript:window.open('juejin.cn/') ,你会发现这个伪协议起作用了,我们真的跳转页面了,浏览器会去执行javascript:后面的代码。
在浏览器打开javascript:XXX的时候,它会先运行XXX中的代码,当有返回值的时候,前页链接会替换为这段代码的返回值。如果不希望改变当前页面,就需要使最后的没有返回值。
看到伪协议的时候,我们第一时间能想到当我们想禁用a标签的默认行为的时候,用的就是伪协议:
<p id='demo'>文字</p>
<a href="" onclick="getElementById('demo').innerHTML = Date()">默认行为</a>
<a href="javascript:void(0);" onclick="getElementById('demo').innerHTML = Date()">void(0);</a>
<a href="javascript:;" onclick="getElementById('demo').innerHTML = Date()">;</a>
当我不设置href的值时,会触发a标签的默认行为:刷新页面 所以当我们希望禁用a标签的默认行为的时候,我们会使用伪协议使其没有返回值。