新窗口需提前告知
别名: 新窗口预告 · opens in new window · 提前告知跳转 · new window disclosure
概念解释
链接默认被理解为「在这里换成下一页」。若实际会另开窗口或标签,这个例外必须在点击之前被看见或被读出来。提前告知是让人把「我会离开这条可见的链,原页还会留着」纳入决策,而不是点完才在别处发现一页新的、在此处发现返回失灵。告知的是打开方式,不是目的地好不好、外不外链。
机制
点击的预测模型来自大量原地跳转。新窗口是一次方法突变:焦点、history、返回手势全部换了作用对象。突变若无预告,第一反应是「没打开」或「页面坏了」,然后才在任务栏或标签栏里搜到那一页。视障用户的读屏不会自动跟到新上下文,未告知的新窗口等于一次未声明的焦点迁移。键盘用户的焦点还留在原文档的那条链上,新窗口在焦点序里不存在,直到他们碰巧切走。
告知要发生在控件上,发生在激活之前。点完再弹「已在新窗口打开」是事后通知,预测已经失败。图标、可见文字或 aria-describedby 把「新窗口」编进这个控件的名字,人才能决定要不要分叉。告知不足常见于只放一个外链箭头却同时 target="_blank" 打开站内帮助——箭头被读成「外部」,实际是「新窗口」,两种例外被焊成一个符号。
怎么研究
比较三种链接:无提示新开、有「新窗口」可见说明再新开、原地打开。任务是打开后用返回回到出发位置,并口述点击前以为会发生什么。
- 因变量:预测与结果是否一致、在错误上下文里找页面的时间、读屏是否在激活前读到新窗口。
- 自变量:告知形式(图标 / 文字 / 无)、告知是否进无障碍名。
- 方法论注意点:看见过该图标惯例的内部员工会高估图标的可学性。新用户要用文字或图标+文字。测读屏时必须在激活前停下来问「这个控件会做什么」,不要等新窗口已经出来再问听没听到——那时测的是事后发现,不是预告。
边界
用户用系统自己的「在新标签打开」手势,产品没有另开,无需告知。同一页上每个链接都新开(例如一组外发工具)且页面标题已经声明「将在新窗口打开」,逐条重复会变噪声,在页首声明一次即可。弹窗拦截器挡住了 window.open 时,告知的是「会新开」,实际是「没开」,需要的是失败说明,不是再强调新窗口。
怎么落地
- 凡
target="_blank"或脚本开窗的控件,可见标签或相邻文字写明「新窗口打开」;无障碍名里也要有同等含义,不要只靠颜色图标。 - 站内新开和站外跳转用不同的预告,不要一个外链图标包办两件事。
- 不要在点击后再用 toast 补充「已在新标签打开」来代替控件上的预告。
- 验证:把新开链接交给未参与设计的人,点击前问「会怎样」。答不出「另开一页、这页还在」,告知失败。再用读屏走一遍,激活前必须听到新窗口。关掉图标只留文字再测一次,确认不是靠内部惯例。