打开新窗口问题和右键click问题(散分)
hax 2002-03-28 05:17:06 本文是我在csdn上讨论屏蔽右键问题(见http://www.csdn.net/expert/
topic/596/596689.xml?temp=.2618524)时,为说明国外在讨论问题的
境界领先于国内之论点时所翻译的文章。
译文摘自:http://bugzilla.mozilla.org/show_bug.cgi?id=71705
问题背景介绍:右键通常被用来激发context menu——上下文菜单,
根据不同的情况提供诸如在新窗口里打开、察看源代码(这是许多钻
牛角尖的人想屏蔽它的原因)、复制url、另存为、加入收藏夹等功
能。有些工具软件还把自己集成到上下文菜单中,如Flashget。
Mozilla和IE都提供oncontextmenu事件来处理上下文菜单(不仅针对
鼠标右键,也适用于Shift-F10)。问题在于按右键是否应该触发
onclick事件?
IE的做法是不触发,因此你不能捕获右键click,但使用onmousedown
可以捕获右键按下的事件。Opera 6更进一步,即使onmousedown也无
法捕获右键事件。Mozilla则可以触发,因此就引起了一些开发者关
于这种触发是否是一个bug的讨论。
-------------------------------------------------------------
Additional Comment #16 From hoju@visi.com 2001-03-30 10:56
不久以前,在一个w3c的邮件列表中,我参与了关于如何处理这样一
个事实即:除了Frameset DTD之外,“target”已经被列为不建议的
属性(译注:许多传统的HTML 3.2的元素和属性在HTML 4.0以及XHTML
1.0中被列为不建议的,并在XHTML 1.1中被彻底摒弃,例如元素font、
属性align等;frameset相关的frameset、frame、target之类也是仅
仅被保留在Frameset DTD中,而没有进入Strict DTD;被摒弃的特性
包括Frame的功能将以CSS Level 1和CSS Level 2来取代)的讨论。
许多人在需要页面上的连接在一个新窗口打开时都这样写:
<a href="somepage.html" target="_blank">
反对使用target属性指向frame之外的任何其它地方的论据在于:它强
制连接打开一个新窗口而没有给用户任何救援。它也没有提供任何标
签里内容的信息。最终一致同意的解决方案是这样写:
<a href="somepage.html" onclick="newWin(this.href); return false;">
newWin() 包含了window.open的句法。
这样做的论据在于新窗口应该是通过脚本打开而非作为HTML说明的一
部分,并且用户可以通过简单的关闭javascript功能来禁止打开新窗
口。它也比另一种可选的脚本更好:
<a href="javascript:newWin(somepage.html);">
因为这个连接是死的,除非用户打开了javascript功能;而在onclic
k的例子里,连接在javascipt被关闭时仍是可访问的。
现在来看上述讨论如何与这个bug(译注:指按右键触发onclick事件)
发生关联……
当我使用上面的脚本,我的意图是当连接被左键点击时打开一个新窗
口(正如你打开一个普通连接)。然而,如果我不想进入这个连接,
而只是想复制这个连接或者将其标上书签(译注:在IE里则是把连接
添加到收藏夹),由于onclick被右键点击触发,就变成了不可能。
我在以下页面http://www.visi.com/~hoju/humor.html里广泛的使用
了上面的脚本。
你可以说我不应该在首页这样使用,但谁又能判断我的意图(或者相
反)?请接受我这样做的事实吧……并且,btw,你也可以注意到这个
页面是遵从HTML 4.01 Strict 和 CSS的。
我可以理解这样的论点:onclick处理程序应该捕获任何click,然后
我们应该通过javascipt检测是哪个button……并且我也很乐意把它作
为一个workaround(译注:我不知道workarount的确切译法,但我感
觉这个词指一个bug的基于实践的替代性解决方案而非根本的解决方案
),但是你仍旧面对这样一个难题——用户和开发者的期望:onclick
(含蓄的)意味着左键点击。
如果你试图通过整个quirks-vs-standards模式来解决,那并不真正触
及到问题,因为较之javascript它更多的处理layout(请让我知道我
的假设在这里是否正确)。
我真的开始明白Blake(译注:另一个参与讨论的人,他的观点是DOM
2既然定义了button的不同值,就说明右键触发onclick不是bug)所说
的DOM2比我所写的更多支持这样的观点(译注:这句话比较难理解,
因为我的英语比较差。有兴趣的人可以看原文。我理解他的意思可能
是指DOM2不仅把检测按键值作为workaround,而可能暗示应该这样处
理),……但是同时,我知道它会违犯大量它之外的现有脚本(译注
:我理解这里指按DOM2之前规范所写的脚本)。
在此期间,我会更新我的脚本来检测哪个鼠标按键被按下以排除右键。
-------------------------------------------------------------
欢迎大家就国外开发者讨论的“境界”以及该问题本身发表高见。
欢迎转载,但请尽量保持本文完整(译错的地方还请指正)。