javascript:void(0) and target="_blank" behaviour
javascript:void(0) and target="_blank" behaviour
首先,我没有真正的问题。我问这个只是出于好奇。
在同一链接中使用javascript:void(0)
和target="_blank"
时,我意外地遇到了一个奇怪的行为,就像这样。
<a href="javascript:void(0);" target="_blank" /> Link </a>
我发现Chrome
正常处理这个,当你点击链接时不做任何事情,而IE
和Firefox
打开一个空白的新选项卡。
我的问题是,是不是javascript:void(0)
应该防止任何点击事件从链接发射,即使它的目标是新的选项卡/窗口?为什么target="_blank"
会覆盖它?
还有什么是最好的方法,如果我是,让我们说,用一些后端语言填充href
属性,我更喜欢target="_blank"
硬编码旁边的href
属性?
<a href=# onclick="return false;">I look like a link!</a>
一直用这个
编辑:对于您关于void(0)的问题,onclick应该具有比href属性更高的优先级,因为它提供了更丰富的功能,并且具有实际阻止href操作的能力-因此我的return false
。只有当onclick事件存在时,href才会出现在机器人和旧浏览器中。
另外,是否使用格式奇怪的url执行常规导航由浏览器自行决定。如果链接以散列开头,它应该直接跳转到书签。但是当它为空或包含其他协议时,这完全取决于浏览器是否决定尝试访问新文档。输入javascript:
伪协议传统上用于bookmarklet,它被期望与当前页面一起工作,所以任何javascript:
不做document.write()
或其他破坏性修改应该使页面不重新加载。
EDIT2:我不确定你在href中的后端语言是什么意思,但考虑html有效的data-
属性,如果它在逻辑上不属于href属性,可以给你的代码一些工作。
我用一个简单的技巧解决了这个问题。它可能有用。
我已经根据链接动态地删除了target属性。例如,如果链接未定义或为空或javascript:void(0),那么我们将使用下面的代码删除目标属性。
如果链接是正确的,我们将为该超链接添加目标属性("第二个If条件"将执行此操作,因为在我的页面中链接是动态的)。
我已经复制了示例html文件(Test.html)。如果我们想要在页面的onload上删除属性,复制此文件中的脚本代码并将其粘贴到所需文件的末尾。如果我们想把这个应用于动态链接,我们必须把这个代码放在一个函数中,我们可以在需要的时候调用它。
此代码将适用于该页中的所有超链接。我们可以通过使用class或任何其他属性将其限制为特定的链接集。
Test.html
---------
<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
<a href="javascript:void(0);" target="_blank">Link1</a>
<a href="javascript:void(0);" target="_blank">Link2</a>
<a href="www.url1.com" target="_blank">Link3</a>
<a href="www.url2.com" target="_blank">Link4</a>
<script>
$("a").each(function() {
if(typeof(this.href) == 'undefined' || this.href == 'javascript:void(0);') {
$(this).attr('href', 'javascript:void(0);');
$(this).removeAttr('target');
}
if(typeof(this.href) != 'undefined' && this.href != 'javascript:void(0);') {
var s_link = this.href;
if (s_link.indexOf('http://') === -1 && s_link.indexOf('https://') === -1) {
s_link = 'https://' + s_link;
}
$(this).attr('href', s_link);
$(this).attr('target', '_blank');
}
});
</script>
- 铬:“;未捕获的语法错误:意外的标记:"
- 可以设置“;文件名"发生错误时显示的内联脚本标记的
- JS表单提交"无法使用Chrome数据保护程序加载此页面.尝试重新加载页面.调试信息:POST CISmtuK
- 检测电话窃听,即:<a href="电话:xxx">在UIWebview上
- 使用“+="操作人员
- //而不是在src=“”上使用http://"属性
- "未捕获的语法错误:意外的标记}"
- 可以<脚本类型=“;text/javascript”>window.location=“/"</
- "实例范围”;TypeScript类的getter/setter
- Javascript复选框函数:;缺少:在属性id之后"
- "“;变量未引用正确的对象
- "日期“;AJAX请求返回的类型值未定义
- 得到"TypeError:无法读取属性'filename'未定义的“;调用“npm start
- Soundcloud api"未捕获的类型错误:无法读取属性'uri'“未定义”;
- "工具提示"jQuery插件坏了
- "锻造;React中的表达式
- 图像可以从源<img src=""/>.TEXT可以在没有javascript的情况下从外部
- 如何提取“;href"最近列表项中的属性值
- CKEditor如何允许href="javascript:void(0)"在小部件中
- 插入“;img src"在javascript中