`

谈新窗口打开链接的合理方式

阅读更多

如果标题换做“用户体验”,感觉大了些,自己毕竟不是这方面的专家,在这里只是谈谈自己的感受。

我还记得很早的时候自己学做网页制作,那时不晓得链接如何从新窗口打开,也不关心这些,因为网页 只是起到一个宣传简介的作用,后来多了友情链接这个东东,是的,那时还没有多标签多选项卡的浏览器出现,大家都用着IE6之类的窗口浏览器,于是那时候大 家养成了个习惯,就是打开一个页面,等浏览结束后下意识的去关浏览窗口,岂不知这个页面的上一页自己也需要,或者网站作者并不希望浏览者点了外部链接后就 脱离自己的网站,因为站长们认为自己网站还有更精彩的浏览者并没有发现……精心开发5年的UI前端框架!

正是由于这些原因,于是广大站长纷纷采用了外部链接的新窗口打开的模式,新窗口打开,无非就是采用JavaScript的window.open办法或者target=”_blank”的方法,由于后者不需要脚本支持所以实际采用多一些。这样以来似乎已经很完美了,真的是这样吗?这些网站继续培养了浏览者盲目按×关闭窗口的习惯,或许他们应该尝试着新的方式那就是按Shift加鼠标左键新窗口打开网页。

终于有一天新的标准XHTML 1.0出现了,广大站长纷纷发现原来的target=”_blank”不能通过标准了,于是大家开始思考:“我们到底做错了什么?”。我们到底做错了什么?大家可以参考这篇 《_blank开新窗口不符合标准?》大 家应该知道是怎么回事了,不加限制的开新窗口说到底是剥夺了用户的选择权,用户有权利选择是原窗口打开还是新窗口打开,我们必须将设计由以自我为中心转变 为以用户为中心,为用户考虑,但是话又说回来了,在中国这种新窗口打开的模式挺符合国情的,大家都默认并习惯了,当你把选择权交给用户时,用户突然变得不 知所措,甚至会怪罪于你的设计,你明明是为用户想的,偏偏用户不领情。

那我们究竟还要不要新开窗口,有没有比较好的做法?至少我认为MSDN的做法是值得我们借鉴的,MSDN在外部链接的旁边放置了个小图标标示着这个链接是个外部链接,但是实际还是本窗口打开的。

MSDN新窗口打开.png

我们何不把这个小图标利用起来,也就是说点击链接是本窗口打开,点击旁边的小图标就新窗口打开,这样貌似这个问题到这里就合理解决了,这个解决方案很早就有了,也是我认为比较好的一个办法,当然大家如果有什么更好的方法可以和我讨论。精心开发5年的UI前端框架!

附加贴上自动识别并加上外部链接图标的JavaScript代码:

(function (){
var window = this, undefined;
     
function addListener(element, e, fn) {
    if (element.addEventListener) {
        element.addEventListener(e, fn, false);
    } else {
        element.attachEvent("on" + e, fn);
    }
}
     
var outlinks =  {
  protocol : /^(?:http|https|ftp|mms):(?:\/\/|\\\\)/i,
  local_url : location.hostname, // 获取本地域名
  icon : 'outlink.png', // 请改成自己的图标路径
     
  set : function(obj, list) {
    for (var i = 0; i < list.length; i++) {
      obj.setAttribute(list[i][0], list[i][1]);
    }
  },
  create : function(anchor) {
    var space = document.createTextNode(' '),
      link = document.createElement('a'),
      img = document.createElement('img'),
      text = '新窗口打开';
     
    outlinks.set(link, [['href', anchor.href],
              ['target', '_blank'],
              ['title', text]]);
    outlinks.set(img, [['alt', text],
              ['src', outlinks.icon],
              ['height', 13],
              ['width', 13],
              ['border', 0]]);
    img.style.verticalAlign='middle';
    link.style.background = 'none';
    link.style.margin = '0';
    link.style.padding = '0';
    img.style.margin = '0';
    img.style.padding = '0';
    link.appendChild(img);
    anchor.parentNode.insertBefore(space,
                    anchor.nextSibling);
        anchor.parentNode.insertBefore(link,
                    anchor.nextSibling
                    .nextSibling);
  },
     
  init : function() {
    try {
      var anchor,
        anchors = document.getElementsByTagName('a');
      for (var i=0; i<anchors.length; i++) {
        anchor = anchors[i];
        if (
          anchor.href &&
          // 跳过加了链接的图片
          !anchor.getElementsByTagName('img')[0] &&
          outlinks.protocol.test(anchor.href) &&
          !anchor.getAttribute('target') &&
          anchor.href.indexOf(outlinks.local_url) < 0) {
            outlinks.create(anchor);
        }
    }
    }catch(e) { alert(e.message);}
  }
}
     
addListener(window, 'load', outlinks.init);
     
})();

 

0
0
分享到:
评论

相关推荐

    window.open打开新窗口参数设置

    ### window.open 打开新窗口参数设置详解 在前端开发中,`window.open()` 方法是浏览器内置的一个功能,用于在JavaScript中打开新的浏览器窗口。本文将深入探讨如何使用 `window.open()` 方法及其参数设置,帮助...

    asp.net中打开新窗口的多种方法

    2. **Response.Write("&lt;script&gt;window.open(XXX.aspx','_blank')&lt;/script&gt;")**:通过JavaScript的`window.open()`函数在新窗口中打开"XXX.aspx"。`_blank`参数指示在新窗口或新标签中打开页面,原窗口保持不变。 3....

    jquery简单实现外部链接用新窗口打开的方法

    总的来说,jQuery提供了一种简便的方式来处理外部链接在新窗口打开的需求,通过正则匹配和事件监听或属性修改,我们可以轻松地实现这一功能。在进行网页开发时,合理利用jQuery可以提高代码的可读性和效率,同时也能...

    JQuery实现的在新窗口打开链接的方法小结

    第一种方法适合于只想改变特定类别的链接行为,第二种方法则是全局性改变所有链接的行为,而第三种则提供了一种更为灵活的选择,允许你基于链接的其他属性来决定是否在新窗口打开。 在使用这些方法时,需要注意的是...

    简述vue路由打开一个新的窗口的方法

    对于这样的需求,Vue Router提供了一种编程式导航的方式,我们可以利用其API实现打开新窗口的功能。 一、Vue Router的基础知识 Vue Router允许我们定义应用中可能有的各种视图所对应的URL。使用路由对象来管理整个...

    Ajax请求成功后打开新窗口地址

    async: false, // 使用同步提交以避免浏览器拦截新窗口打开 success: function(oData) { ssoAction(); } }); } }); } return false; // 阻止默认的链接行为 }); ``` 在这个代码片段中,我们监听所有`&lt;a&gt;`...

    外部链接本地打开X3.2

    4. **JavaScript事件处理**:利用JavaScript,论坛可以控制链接的点击行为,决定是在当前页面打开还是新窗口打开。 5. **浏览器兼容性**:由于不同的浏览器可能有不同的默认行为,Discuz!X3.2需要确保其外部链接本地...

    超级链接a的提示方式和打开方式

    对于新闻列表页,当前页跳转可能是合适的选择,而内容页的链接更适合用新窗口打开,以保证用户能够轻松返回原文。 总的来说,超级链接的提示方式和打开方式是网页设计中不可或缺的考虑因素,它们既要满足用户的需求...

    网址链接代码

    新窗口打开 ``` 2. **rel**:定义链接关系,常用于定义链接是否为`noopener`,以避免跨窗口脚本注入问题。 3. **title**:提供链接的额外信息,通常作为鼠标悬停时的提示文本。 ```html 这是个示例链接"&gt;访问示例...

    超级链接a的表现形式和打开方式

    4. **用户选择**:尊重用户的浏览习惯,提供设置选项,允许用户根据自己的偏好调整链接的打开方式,如始终在新选项卡中打开弹出窗口。 总的来说,超级链接的表现形式和打开方式需兼顾功能性和美学,以提高用户体验...

    DZ插件部链接跳转页 2.1

    而该插件通过设置,可以选择在当前窗口内打开链接,或者在新窗口中打开,甚至可以启用预览模式,让用户在确认无误后再决定是否真正访问,降低了潜在的风险。 此外,这款插件还允许管理员对特定链接进行定制,比如...

    HTML-basics-links-target-blank:target =“ _ blank”,它将在新窗口中打开锚点(通常已通过浏览器设置重定向到标签页)

    然而,现代浏览器为了用户体验,可能会遵循用户设置,如禁用新窗口打开链接,此时`_blank`可能依然会在当前标签页打开。 3. `target="_parent"`:如果当前页面是在框架内打开的,`_parent`会使链接在包含当前页面的...

    a标签是否新开一个页面的问题各大网站的打开情况整理

    - target="_self":在当前页面窗口打开链接,即不会新开页面。 - target="_blank":在新的页面或标签页中打开链接。 首先,百度百科的做法比较灵活。如果链接的header(可能是指页面的头部内容,如导航栏)与当前...

    js让弹出新窗口居中显示的脚本

    在打开新窗口的时候,很多时候开发者希望这个新窗口能够自动居中显示在用户的屏幕上,以提升用户体验。在本篇文章中,我们将探讨如何使用JavaScript脚本来实现这个需求。 首先,需要注意的是,这个功能并不是所有的...

    window.open的参数说明控制谈出可以定植大小的窗口

    在网页开发中,`window.open` 方法是用于打开新窗口或标签页的一个非常实用的功能。此方法常被用在各种场景下,例如:弹出广告、登录框、信息提示等。 #### 方法语法 ```javascript window.open(url, target, ...

    window.open打开窗口被拦截的快速解决方法

    在网页开发过程中,有时会遇到使用JavaScript的`window.open`函数打开新窗口被浏览器拦截的情况。这通常是由于浏览器的安全策略导致的,特别是像Chrome这样的现代浏览器,为了防止弹窗广告等不良用户体验,对`window...

    关于网站target标准

    而一些特定操作如发表新贴、查看短信等,可能会在新窗口打开,以方便用户返回原来的位置。 - 注册向导:在整个注册过程中,`_blank`可以用于创建新窗口,让用户逐步完成注册,而`_self`用于步骤间的前进,确保用户...

    网页设计DW 超链接、锚点链接、邮件链接.pdf

    `target`属性用于指定链接在何处打开,`_blank`表示在新窗口或标签页中打开。`alt`和`title`属性则为链接提供替代文本,对于无障碍访问和搜索引擎优化至关重要,它们分别在图片无法显示或鼠标悬停时显示文本信息。 ...

    网站链接QQ代码

    此代码实现的功能是,当访问者点击页面上的QQ图标时,会以新窗口的方式打开与QQ号码971928937的即时聊天界面,提供了一种便捷的在线沟通方式。 ### 四、注意事项 1. **兼容性**:虽然大多数现代浏览器支持此类链接...

    网页链接【简单的网页链接】

    通过`target`属性,可以控制链接在何处打开,如`_blank`会在新窗口或标签页中打开,`_self`则在当前窗口或标签页中打开。 此外,网页链接还可以包含锚点链接,用于在同一个页面内跳转。锚点由`#`符号后跟一个标识符...

Global site tag (gtag.js) - Google Analytics