完善用户体验: 活用window.location与window.open解决页面跳转问题

简介: 原文地址: JavaScript Redirects and window.open原文日期: 2014年08月27日翻译日期: 2014年08月31日翻译人员: 铁锚(译者注: 本文解决的是按 Ctrl键时使用JS打开新页面的问题)在简化的HTML5规范中,允许在 A 标签内包含多个 DIV 和/或其他块级元素.
原文地址: JavaScript Redirects and window.open
原文日期: 2014年08月27日
翻译日期: 2014年08月31日
翻译人员: 铁锚


(译者注: 本文解决的是按 Ctrl键时使用JS打开新页面的问题)

在简化的HTML5规范中,允许在 A 标签内包含多个 DIV 和/或其他块级元素. 现在只要用 <a> 标签包住块元素,就能搞定原来需要用JavaScript来监听并调用 window.location 实现页面跳转(redirect)功能.
但使用 <a>标签的这种包装形式也有不好使的情况 —— 例如,某个块元素(block)内还有一些 <a> 标签, 这种情况下我们只想在点击parent中<a>以外的其他部分时才跳转到一个给定的地址。

当然,像下面这样用一个简单的listener 也能实现我们的需求:

someElement.addEventListener('click', function(e) {
    // URL地址是什么都行,或者你也可以使用其他的代码来指定.
    // 此处用的是该元素的 `data-src` DOM属性(attribute)
    window.location = someElement.get('data-url');
});

…但这有时会有很糟的用户体验, 当按住CTRL键(Mac是COMMAND键),再用鼠标点击时,它会在同一个(标签页)窗口内打开链接。知道有这个问题,你肯定想到了该如何去解决.我们修改一小点代码就能达成这个目的,赶快花点时间去修复你的listener吧:

someElement.addEventListener('click', function(e) {
    // 获取URL
    var url = someElement.get('data-url');
    // 判断是否按下了CTRL键
    if(e.metaKey || e.ctrlKey || e.button === 1) {
        window.open(url);
    } else {
        window.location = url;
    }
});

原文作者已经在 http://davidwalsh.name/ 网站上实现了这个功能,在使用 window.location进行页面重定向时你也应该记得这一点。这是一个很小的代码改进,但对可用性的提高却是非常重要的!
目录
相关文章
|
3月前
|
Web App开发 Android开发
App自动化查看webview的元素定位信息
App自动化查看webview的元素定位信息
30 0
|
9月前
layui框架实战案例(4):因内容安全策略导致弹出层模态框无法正常显示微信公众号文章使用window.open的解决方案
layui框架实战案例(4):因内容安全策略导致弹出层模态框无法正常显示微信公众号文章使用window.open的解决方案
39 1
|
前端开发
前端 window 和 window.location
前端 window 和 window.location
前端 window 和 window.location
|
移动开发 Android开发
解决移动端页面window.location.replace不生效的问题
解决移动端页面window.location.replace不生效的问题
1475 0
为什么会有window.window这种设计
为啥要搞这个这个看起来貌似很奇葩的设计。 要解答这个问题,还得请出this,我们经常说浏览器中的全局对象是window, 这句话对了,也还没完全对。 全局对象的真实身份应该是全局作用域的this。 window只是为了便于访问this,弄出来的一个属性。
271 0
为什么会有window.window这种设计
window.open被浏览器拦截终极解决方案
window.open被浏览器拦截终极解决方案
195 0
|
前端开发
window.open 被浏览器拦截解决方案
对于ajax返回后在打开新窗口,可以在用户点击后就打开一个空白窗口,然后再返回成功后给空白窗口一个url,这样就不会被拦截了
311 0
|
测试技术
SAP Spartacus cxFocus增添了refresh Focus功能后的一些考虑
SAP Spartacus cxFocus增添了refresh Focus功能后的一些考虑
SAP Spartacus cxFocus增添了refresh Focus功能后的一些考虑
|
JavaScript SEO
调试 SAP Spartacus 服务器端渲染 SEO HTML Tag 生成逻辑的注意事项
调试 SAP Spartacus 服务器端渲染 SEO HTML Tag 生成逻辑的注意事项
79 0
调试 SAP Spartacus 服务器端渲染 SEO HTML Tag 生成逻辑的注意事项