我正在使用此功能将URL复制到剪贴板:
function CopyUrl($this){
var querySelector = $this.next().attr("id");
var emailLink = document.querySelector("#"+querySelector);
var range = document.createRange();
range.selectNode(emailLink);
window.getSelection().addRange(range);
try {
// Now that we've selected the anchor text, execute the copy command
var successful = document.execCommand('copy', false, null);
var msg = successful ? 'successful' : 'unsuccessful';
if(true){
$this.addClass("copied").html("Copied");
}
} catch(err) {
console.log('Oops, unable to copy');
}
// Remove the selections - NOTE: Should use
// removeRange(range) when it is supported
window.getSelection().removeAllRanges();
}
在桌面浏览器上一切正常,但在iOS设备上无法正常运行,在iOS设备上我的函数成功返回,但是数据根本没有复制到剪贴板。是什么原因造成的,我该如何解决这个问题?
看起来像是在选择范围和一些小技巧的帮助下,可以直接复制到iOS(> = 10)Safari上的剪贴板。我在iPhone 5C iOS
10.3.3和iPhone 8 iOS 11.1上对此进行了亲自测试。但是,似乎存在一些限制,这些限制是:
<input>
和<textarea>
元素复制文本。<form>
,那么它必须在内contenteditable
。readonly
(虽然你可能会尝试,这不是一个“官方”方法记载任何地方)。要满足所有这四个“要求”,您将必须:
<input>
或<textarea>
元素内。contenteditable
和的旧值,readonly
以便能够在复制后还原它们。contenteditable
到true
和readonly
到false
。contenteditable
和readonly
值。execCommand('copy')
。这将导致用户设备的插入符号移动并选择所需元素中的所有文本,然后自动发出复制命令。用户将看到被选中的文本,并显示带有选择/复制/粘贴选项的工具提示。
现在,这看起来有点复杂,发出一个复制命令太麻烦了,所以我不确定这不是Apple的预期设计选择,但是谁知道…同时,这 目前可行在iOS > =
10上
。
工作实例
总而言之,您需要的代码如下所示:
function iosCopyToClipboard(el) {
var oldContentEditable = el.contentEditable,
oldReadOnly = el.readOnly,
range = document.createRange();
el.contentEditable = true;
el.readOnly = false;
range.selectNodeContents(el);
var s = window.getSelection();
s.removeAllRanges();
s.addRange(range);
el.setSelectionRange(0, 999999); // A big number, to cover anything that could be inside the element.
el.contentEditable = oldContentEditable;
el.readOnly = oldReadOnly;
document.execCommand('copy');
}
请注意,el
此函数的参数必须为<input>
或<textarea>
。
在 iOS
<10
上,剪贴板API对Safari有一些限制(实际上是安全措施):
copy
仅在有效选择上cut
并且paste
仅在集中的可编辑字段中触发事件。document.execCommand()
。请注意,“快捷键”是指一些可单击的键(例如,复制/粘贴操作菜单或自定义iOS键盘快捷键)或物理键(例如,已连接的蓝牙键盘)。ClipboardEvent
构造函数。因此(至少到目前为止) ,无法使用Javascript在iOS设备上的剪贴板中以编程方式复制一些文本/值 。只有用户可以决定是否复制某些内容。
但是,可以通过编程方式选择某些内容
,以便用户仅需点击所选内容上显示的“复制”工具提示。这可以通过使用与上面完全相同的代码来实现,只需删除execCommand('copy')
,这实际上是行不通的。
我正在使用这个函数将一个URL复制到剪贴板: 在桌面浏览器上一切正常,但在iOS设备上就不行了,在iOS设备上我的函数成功返回,但数据根本没有复制到剪贴板上。是什么原因造成的?我该如何解决这个问题?
问题是,从vim到剪贴板的复制/粘贴停止工作。我不知道为什么。。。 在中,我也没有看到和缓冲区... 这是我的。vimrc,如果需要的话。 有什么建议吗? 谢谢
null null null null null null
问题内容: 如何将BufferedImage存储到系统剪贴板中? 问题答案: 这是从这里获得的工作代码,已成功测试
将一个字符串复制到剪贴板。 仅作为用户操作的结果(即,在 click 事件侦听器中)。 创建一个新的 <textarea> 元素,用提供的数据填充它,并将其添加到 HTML 文档中。 使用 Selection.getRangeAt() 来存储选择的范围(如果有的话)。 使用 document.execCommand('copy') 复制到剪贴板。 从HTML文档中删除 <textarea> 元素。
问题内容: 我正在尝试不使用Flash复制到剪贴板,如果浏览器与javascript方法不兼容,我打算使用ZeroClipboard退回到Flash 。 我有一个类似按钮的onClick侦听器: 和一个输入字段,如下所示: 当前,这可以按预期工作,但是设计要求包含要复制的文本的字段不可见。我尝试了两种设置,但都没有成功。两者都会导致按钮选择整个页面并将整个内容复制到用户的剪贴板。 我比较有信心,原