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

原文地址: 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进行页面重定向时你也应该记得这一点。这是一个很小的代码改进,但对可用性的提高却是非常重要的!

时间: 2024-10-16 09:49:28

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

onclick=&quot;window.location.href=&#39;xxx.jsp/action&#39;&quot; 无法跳转问题

链接类型的按钮  用onclick="window.location.href=" ' xxx.action' " 我做页面的时候因为一个跳转要用到 超链接类型的按钮,可是我点击按钮后发现没有反应,服务器也没有报错,可把单击按钮后要发生的一系列流程全部检查了好几次还是不行 不经意间看到 我设置 input标签的 type="submit"   原来我并不打算在<s:form>中的action进行出去 所以action=" "

window.location与window.open()的区别

"top.location.href"是最外层的页面跳转"window.location.href"."location.href"是本页面跳转"parent.location.href"是上一层页面跳转. location是window对象的属性,而所有的网页下的对象都是属于window作用域链中(这是顶级作用域),所以使用时是可以省略window.而top是指向顶级窗口对象,parent是指向父级窗口对象. window.

window.location.href 失效的解决办法

第一种:在window.location.href 后面加上 window.event.returnValue = false; 如: <a href="#" onclick="window.location.href='http://www.microsoft.com';   window.event.returnValue=false;"> 第二种: 把window.location.href写成 JavaScript:window.location

window.location属性用法及解决一个window.location.search为什么为空的问题

通常用window.location该属性获取页面 URL 地址: 1.什么是window.location? 比如URL:http://b.a.com:88/index.php?name=kang&when=2011#first window.location和document.location互相等价的,可以交换使用 location的8个属性都是可读写的,但是只有href与hash的写才有意义. 例如:改变location.href会重新定位到一个URL,而修改location.hash会

关于 Safari 浏览器不支持 location [ window.location.href window.open()] 跳转问题的解决方案

最近在做项目时,碰到 safari 浏览器不支持location跳转问题,针对此问题,可以通过 js 模拟点击时间来解决,代码如下: 1 <!DOCTYPE HTML> 2 <html lang="en-US"> 3 <head> 4   <meta charset="UTF-8"> 5   <title></title> 6 </head> 7 <body> 8   &

window.location.hash的简单了解

location是javascript里边管理地址栏的内置对象,比如location.href就管理页面的url,用location.href=url就可以直接将页面重定向url.而location.hash则可以用来获取或设置页面的标签值.比如http://domain/#admin的location.hash="#admin".利用这个属性值可以做一个非常有意义的事情. 很多人都喜欢收藏网页,以便于以后的浏览.不过对于Ajax页面来说的话,一般用一个页面来处理所有的事务,也就是说,

window.location.href和window.open的几种用法和区别

使用js的同学一定知道js的location.href的作用是什么,但是在js中关于location.href的用法究竟有哪几种,究竟有哪些区别,估计很多人都不知道了. 一.location.href常见的几种形式 目前在开发中经常要用到的几种形式有: 1 2 3 4 5 6 self.location.href;//当前页面打开URL页面 window.location.href;//当前页面打开URL页面 this.location.href;//当前页面打开URL页面 location.h

利用简洁的图片预加载组件提升h5移动页面的用户体验

在做h5移动页面,相信大家一定碰到过页面已经打开,但是里面的图片还未加载出来的情况,这种问题虽然不影响页面的功能,但是不利于用户体验.抛开网速的原因,解决这个问题有多方面的思路:最基本的,要从http请求合并,缓存管理,图片压缩等方面做性能优化:另外就是可以对页面里用到的所有图片做预加载的处理,当用户打开页面的时候不立即显示第一屏,而是先显示资源加载效果,等到加载完毕,再来显示页面的主内容,这样就能解决那个问题.虽然这种加载效果占用了用户的浏览时间,但是我们可以把它做的好看有趣一点,所以也不会影

window.location.hash 使用说明

location是javascript里面管理地址栏的内置对象. 比如loation.href是 页面的url .但是 location.hash可以获取或设置页面的 标签值 比如http://domain/#testDemo中 咱们的location.hash 就是 #testDemo  下面引用一个 网上的demo 一个搜索版块,功能有3个:普通搜索,高级搜索,后台管理,分别指明他们各自的hash 值:#search,#advsearch,#adminboss. 在页面初始化的时候,通过wi