【问题标题】:Webkit: contextmenu / click handling bug workaround?Webkit:上下文菜单/单击处理错误解决方法?
【发布时间】:2012-01-15 16:53:42
【问题描述】:

我正在尝试以跨浏览器的方式在锚元素上使用上下文菜单和点击处理程序,但事实证明这非常困难。

这里的问题是:如果 preventDefault() 从 contextmenu 事件处理程序调用 contextmenu 事件,浏览器的行为会有所不同。所有浏览器都不会正确显示其浏览器的默认上下文菜单。然而,在 Chrome 和 Safari 中,浏览器随后会跟随元素的单击事件(并且仅当上下文菜单事件被取消时)。

当我从上下文菜单处理程序中取消上下文菜单事件时,我不希望在同一元素上触发连续的单击事件。有没有一种干净的方法来解决这个问题?无论是在 contextmenu 处理程序上返回 false 还是调用 stopPropagation 函数都不会缓解这个问题!

Here 是一个带有奇怪故障的演示(使用 Webkit 检查器或 Firebug 来查看跟踪)


这是一个答案:使用 jQuery 而不是 POJ 来清理宽度/高度的东西:

    function Cancel_Next_Click()
    {
        // Compatibility - Chrome & Safari bug where context click event is followed by an undesired click event

        var Cancel_Next_Click_Element = document.createElement("div");
        Cancel_Next_Click_Element.style.position = "fixed";
        Cancel_Next_Click_Element.style.left = "0px";
        Cancel_Next_Click_Element.style.top = "0px";
        Cancel_Next_Click_Element.style.width = window.innerWidth;
        Cancel_Next_Click_Element.style.height =window.innerHeight;
        document.body.appendChild(Cancel_Next_Click_Element);

        var Cancel_Next_Click_Element_Listener = function() {
                document.body.removeChild(Cancel_Next_Click_Element);
                document.removeEventListener('mouseup', Cancel_Next_Click_Element_Listener, false);
            }

        document.addEventListener('mouseup', Cancel_Next_Click_Element_Listener, false);
    }

【问题讨论】:

  • 使用 POJ 吗?或者您可以使用 jquery 或其他一些框架吗?在那你也许可以使用除a 标签之外的东西来完成这个
  • 如果 jquery 或任何其他框架确实解决了这个问题,我真的很想知道!我尝试在 jQuery 中以它提供的每一种已弃用和新的方式绑定事件,但它们都不能解决我认为的 WebKit 错误。
  • 目前,解决这个问题的最简洁和最通用的方法可能是在上下文菜单处理程序中创建一个临时拦截元素,使点击无效,但我希望有一个更简洁的解决方案!跨度>

标签: javascript events webkit cross-browser contextmenu


【解决方案1】:

例如,通过使用像span 这样的其他元素,您不必担心默认操作,因为即使默认情况下也不会有点击。我发现这两个 jquery 插件可能对你有用:

http://abeautifulsite.net/blog/2008/09/jquery-context-menu-plugin/

http://beckelman.net/post/2008/11/04/Right-or-Left-Click-Context-Menu-Using-jQuery-Demo.aspx

【讨论】:

  • 谢谢! - 1) jquery 上下文菜单插件实际上在 Chrome 中根本不显示上下文菜单。 (在 Firefox 中工作!)
  • 2) 右键或左键单击上下文菜单演示在 Chrome/Safari 中也不起作用! (在 Firefox 中工作!)
  • 如果你确实需要一个href,比如在浏览器状态栏显示url,以及跨浏览器和机器人的兼容性等,你别无选择使用锚标记。这很难!
  • 我刚刚在 Chrome 和 IE9 中尝试了他们的两个演示页面,对我来说都很好
  • Eonasdan,这可能是 Mac 的错误!
猜你喜欢
  • 2012-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多