【问题标题】:How to detect copy to clipboard functionality before using it如何在使用之前检测复制到剪贴板功能
【发布时间】:2016-03-22 12:01:57
【问题描述】:

我正在尝试在纯 JS 中创建复制功能,所以没有 flash。我遇到的问题是,当浏览器不支持复制到剪贴板时,我不想显示复制按钮。

我正在使用document.execCommand('copy') 方法复制到剪贴板,但对此的支持并不是最好的。例如,safari 有 execCommand 功能,但不支持 copy 参数。这意味着我不能简单地检查函数是否存在。

由于这种狡猾的支持,我认为我将不得不介入浏览器检测,就像我在查看zeroclipboard 问题时遇到的 github 所做的那样。 Here 是我找到的实现。

是否有正确的方法来检测用户代理?我宁愿不使用 NavigatorID.userAgent,因为根据 MDN 已弃用。

【问题讨论】:

  • 你试过typeof document.execCommand !== 'undefined' 吗?
  • 正如我在问题中所说,safari 具有功能 document.execCommand 但不支持参数'copy'。这就是为什么我正在考虑沿着浏览器检测的路线走下去。尝试使用带有该参数的函数时,它也不会引发错误。
  • 在我看来,除了用户代理嗅探之外,没有其他可靠的方法。但是(我意识到这是 5 年后的事了!)对此的支持现在无处不在。 2016 年年中之后发布的任何内容都缺乏支持,因此我认为不再需要检测支持。

标签: javascript copy-paste


【解决方案1】:

我注意到在版本 10 之前的 Safari 中(在 9.0 和 9.1 上测试)以下构造

document.execCommand('copy');

将返回false。 这一事实可用于检查 Safari 中的兼容性。

if (false == document.execCommand('copy')) {
    // Logic for handling the copy functionality in some other way
}

【讨论】:

  • Firefox (v48) 刚刚在控制台中尝试时返回 false 和警告。根据 MDN,firefox 从 v41 开始支持该命令 - developer.mozilla.org/en/docs/Web/API/Document/execCommand
  • 是的,遇到了同样的问题。有趣的事实是 FF v47 和 FF v49 返回true。看起来像 v48 中的错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-23
  • 2014-12-26
  • 1970-01-01
相关资源
最近更新 更多