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

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

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

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

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

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

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

})();

时间: 2024-10-11 00:42:06

谈新窗口打开链接的合理方式的相关文章

jquery新窗口打开链接

第一种:下面的代码是针对m35ui这个样式下的a都是在新窗口打开  <script type="text/javascript"> jQuery(document).ready(function($) { $('.m35ui a').attr({target: "_blank"}); }); </script> 第二种:  <script src="http://code.jquery.com/jquery-latest.js

MarkDown在新窗口打开链接

在用MarkDown编辑时,如果打算在新窗口中打开链接,可以使用HTML语法代替MarkDown语法,如下所示: <a href=https://www.python.org target = _blank>Python官方网站</a> 显示效果为:Python官方网站 原文地址:https://www.cnblogs.com/syh6324/p/9482622.html

WordPress如何简单一键设置全站链接都新窗口打开

WordPress如何简单一键设置全站链接都新窗口打开 文章中需要在新的窗口打开链接大概需要在几个地方 1.网站友情链接 2.文章中的超链接 3.评论链接 4.网站导航链接 5.网站子导航链接 6.网站其他内链 以上加粗的两个是非常重要的,我们为什么要设置WordPress网站全站超链接都要设置新窗口打开方式呢?学过SEO的同学们应该都知道,以新窗口打开超链接,原先点开的网站都会停留在浏览器顶部,紧挨着现在这个页面的旁边,SEO里面有种优化方法就叫做:跳出率,跳出率是什么呢?跳出率就是一个用户在

CefSharp禁止弹出新窗体,在同一窗口打开链接,或者在新Tab页打开链接,并且支持带type=&quot;POST&quot; target=&quot;_blank&quot;的链接

说明:在同一窗口打开链接,只要稍加改造就可以实现,这里实现的是在新Tab页打开链接,并且支持带type="POST" target="_blank"的链接 github和bitbucket上相关问题: 1.WPF empty POST data when using custom popup    https://github.com/cefsharp/CefSharp/issues/1267 2.CefLifeSpanHandler, customized OnB

javascript如何在新窗口打开网页

javascript如何在新窗口打开网页:有时候需要在新的窗口打开网页,方法有很多,当然这个问题也很简单,主要是针对初学者的.下面介绍两种在新窗口打开网页的方法:1.最基本的方式: <a href="http://www.softwhy.com" target="_blank">蚂蚁部落</a> 只要将链接的target属性值设置为_blank即可.2.使用javascript打开: window.open([url=http://www.s

CefSharp 在同一窗口打开链接的方法

摘要 在winform中使用cefsharp的时候,我们在浏览网页的时候,想在同一个窗口打开链接,而不是创建新的窗口.可以通过下面的方法实现. 解决方案 CefSharp 中控制弹窗的接口是 ILifeSpanHandler ,可以对 OnBeforePopup 进行重写,即可控制是否弹出新窗体.接口定义如下: bool ILifeSpanHandler.OnBeforePopup(IWebBrowser browserControl, IBrowser browser, IFrame fram

浏览器对新窗口打开页面的阻止情况

事情是这样的:我们后台人员有一个需求,希望在ajax请求成功后的回调函数里,新窗口打开一个页面.示例代码如下: $("#btn").on("click",function(){ $.ajax({ url : "opendata.html", type : "post", data : {"a" : 1}, success : function(){ window.open("http://www.

JS~模拟表单在新窗口打开,避免广告拦截

说起广告拦截,这应该是浏览器的一个特性,它会将window.open产生的窗口默认为一个广告,将它进行拦截,但有时,这不是我们所希望的,有时,我们就是需要它在客户端的浏览器上弹出一个新窗口,以展示数据处理的更新结果,例如,一个创建商品的预览功能,它需要先保存数据,然后再在新窗口展示最新的信息,这种需求并不少,而大多数人的作法就是使用window.open去弹窗口,但它确实不是一种好的方式! 新方式来了 我们知道表单提交实际上可以把POST的结果响应到新窗口上,我们就是利用表单的这种性质,在JS中

HTML之:让网页中的&lt;a&gt;标签属性统一设置-如‘新窗口打开’

在开发过程中,我们往往想在页面中,给<a>设置一个统一的默认格式,例如我们想让链接:“在新窗口打开”,我们就可以使用<base>标签 在网页中添加这段代码: <head> <base target="_blank"> </head> [注解] <base> 标签为页面上的所有链接规定默认地址或默认目标. 通常情况下,浏览器会从当前文档的 URL 中提取相应的元素来填写相对 URL 中的空白. 使用 <base