【问题标题】:Disable select, allow copy/paste禁用选择,允许复制/粘贴
【发布时间】:2017-07-15 05:08:36
【问题描述】:

我正在构建一个覆盖标准选择行为并允许复制和粘贴元素的应用程序。问题是如果我禁用选择,复制事件也会消失。

我尝试过使用

onselectstart="return false;"

.no-select {     
    -webkit-touch-callout: none;
    -webkit-user-select: none;
    -khtml-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;  
}

它可以工作,但它也会禁用复制事件。

我也尝试只为这些包含文本的部分添加.no-select 属性,但它很难维护并且效果不佳 - 有时复制事件被阻止并且我无法控制它。

我怎样才能禁用选择,但启用复制/粘贴正确的方式?


编辑:

  • 我不想复制文本,而是我自己的 json 结构。复制在 onCopy 处理程序中处理。
  • 我需要订阅由 chrome 菜单或系统快捷方式启动的标准 chrome 复制事件。

【问题讨论】:

  • 我想知道如何在不选择文本的情况下进行复制/粘贴?
  • 我在onCopy事件中处理复制
  • 我不想复制文本(这是标准行为),而是我自己的对象的 json 表示
  • 只需在该文本后面制作一个小按钮,这会指示用户将该文本复制为对象而不选择它。还有一个名为 clipboardjs 的库,您可以使用它来将内容放入剪贴板。
  • @Kyon:我无法添加任何按钮、上下文菜单等。我只能中继浏览器触发的标准复制事件。

标签: javascript css html google-chrome


【解决方案1】:

当您禁用突出显示/选择时,您想要复制什么?没选的东西还是什么都没有

我不想复制文本(这是标准行为),但我自己 对象的json表示

那么我有两个解决你的问题的方法:

  1. 使用复制到剪贴板的功能覆盖上下文菜单(tutoriallibrary

    if (document.addEventListener) {
            document.addEventListener('contextmenu', function(e) {
                alert("Write own menu with copy");
                e.preventDefault();
            }, false);
        } else {
            document.attachEvent('oncontextmenu', function() {
                alert("Write own menu with copy");
                window.event.returnValue = false;
            });
        }
    body {     
        -webkit-touch-callout: none;
        -webkit-user-select: none;
        -khtml-user-select: none;
        -moz-user-select: none;
        -ms-user-select: none;
        user-select: none;  
    }
    <body>
    Some text
    </body>
  2. 添加带有复制到剪贴板功能的“复制”按钮(tutoriallibrary

  3. 将组合键ctrl + c(和其他类似command + c)与复制到剪贴板的功能(tutoriallibrary)绑定
  4. 使用 Flash 或其他外部浏览器插件提供复制到剪贴板功能 (not recommended)

【讨论】:

  • 不幸的是,在我的应用程序中没有上下文菜单的位置(它被禁用,因为鼠标右键做了其他事情)。我也不能使用自定义键绑定,因为我需要它与 chrome 复制/粘贴菜单和用户的系统特定快捷方式一起使用。
  • 所以“复制”按钮或绑定组合键 ctrl+c 具有复制到剪贴板的功能 (sitepoint.com/javascript-copy-to-clipboard)。我没有看到其他方式
  • 但在 Mac 上有Command+c,用户也可能有自己的快捷方式。
  • 所以也绑定Command+c 或者只是添加“复制”按钮。如果您对此有疑问,那么您可以构建自己的 Web 浏览器分支(例如 webkit github.com/WebKit/webkit)并修改几乎任何您想要的东西。为什么不是全部?因为网络浏览器只是操作系统中的程序,所以为了完全控制你需要创建自己的操作系统(或叉现有的)。对于好明星,我可以推荐Plan9InfernoOS。如果你是旧时尚FreeBSD 也可以。欢迎来到 IT 依赖世界
  • @J.Doe 这太疯狂了。 Web 浏览器在 chrome 菜单中提供类似“复制”按钮的按钮。真的有什么方法可以在不“分叉网络浏览器”的情况下绑定它吗?
猜你喜欢
  • 2018-01-19
  • 2013-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多