- objective-c - iOS 5 : Can you override UIAppearance customisations in specific classes?
- iphone - 如何将 CGFontRef 转换为 UIFont?
- ios - 以编程方式关闭标记的信息窗口 google maps iOS
- ios - Xcode 5 - 尝试验证存档时出现 "No application records were found"
我看了很多帖子,但找不到以下两个问题的明确当前答案,因为标准和浏览器支持似乎一直在不断变化。
根据标准,在“复制”事件处理程序中使用 event.clipboardData.setData 更改剪贴板是否合法?
最佳答案
截至 2016 年,剪贴板 API 确实处于积极开发阶段,但此后情况趋于稳定:
规范允许在 'copy'
事件处理程序中使用 event.clipboardData.setData()
更改剪贴板(只要事件不是 synthetic ) .
请注意,您需要阻止事件处理程序中的默认操作,以防止您的更改被浏览器覆盖:
document.addEventListener('copy', function(e){
e.clipboardData.setData('text/plain', 'foo');
e.preventDefault(); // default behaviour is to copy any selected text
});
如果您需要触发复制事件(而不仅仅是处理用户通过浏览器 UI 发出的复制请求),您必须使用 document.execCommand('copy')
。它只适用于某些处理程序,例如 click
处理程序:
document.getElementById("copyBtn").onclick = function() {
document.execCommand('copy');
}
copy
/cut
/paste
事件 (since Firefox 22) 和 中的 clipboardData
execCommand('copy')
来自用户操作 ( since Firefox 41 )execCommand('copy')
。 https://github.com/garykac/clipboard/blob/master/clipboard.md 有一个 execCommand(cut/copy/paste)
的兼容性表。
您可以使用下面的代码片段对此进行测试,请对结果发表评论。
window.onload = function() {
document.addEventListener('copy', function(e){
console.log("copy handler");
if (document.getElementById("enableHandler").checked) {
e.clipboardData.setData('text/plain', 'Current time is ' + new Date());
e.preventDefault(); // default behaviour is to copy any selected text
}
// This is just to simplify testing:
setTimeout(function() {
var tb = document.getElementById("target");
tb.value = "";
tb.focus();
}, 0);
});
document.getElementById("execCopy").onclick = function() {
document.execCommand('copy'); // only works in click handler or other user-triggered thread
}
document.getElementById("synthEvt").onclick = function() {
var e = new ClipboardEvent("copy", {dataType: "text/plain", data:"bar"});
document.dispatchEvent(e);
}
}
<html>
<input id="enableHandler" type="checkbox" checked>
<label for="enableHandler">Run clipboardData.setData('text/plain', ...) in the "copy" handler</label>
<p>Try selecting this text and triggering a copy using</p>
<ul>
<li><button id="execCopy">document.execCommand('copy')</button> - should work.</li>
<li><button id="synthEvt">document.dispatchEvent(clipboardEvent)</button> - should NOT work</li>
<li>with keyboard shortcut - should work</li>
<li>or from the context menu - should work</li>
</ul>
<p>If the "copy" handler was triggered, the focus will move to the textbox below automatically, so that you can try pasting from clipboard:</p>
<input type="text" id="target" size="80">
实现后,navigator.clipboard
将允许您编写如下代码:
navigator.clipboard.writeText('Text to be copied')
.then(() => {
console.log('Text copied to clipboard');
})
.catch(err => {
// This can happen if the user denies clipboard permissions:
console.error('Could not copy text: ', err);
});
Chrome 66 开始交付部分实现,他们已经发布了 an article about the new API。
关于javascript - 复制事件中的 event.clipboardData.setData,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36270886/
我正在尝试访问浏览器中的粘贴事件并覆盖它。但是 event.clipboardData 未定义。目前我所拥有的就是这个: function handlePaste (event) { even
我们试图让我们的用户在两个系统之间复制粘贴数据。从网页到 Electron 应用程序。 用户将点击一个按钮,我们在 copy-to-clipboard 的帮助下触发复制事件. import copy
我正在 ASP.NET WebForms 上创建 Web 应用程序,我的任务之一是将数据从网页复制/粘贴到 Excel。我/正在使用 window.clipboardData,它适用于我的用户(本地管
当用户在移动版 Safari 中粘贴图像时,我需要添加额外的行为。我使用以下代码获取 clipboardData: document.getElementById('content').addEven
我想通过 CTRL+V 从 Angular6 中的 ClipboardEvent 接收文件。但是剪贴板数据总是空的(我测试了图像和文本)。我在最新的 Chrome/Firefox 版本上对其进行了测试
我有一个 Angular2 组件,它具有从剪贴板粘贴数据的方法: inputPaste(event){ let clipboardData = event.clipboardData; ...
我看了很多帖子,但找不到以下两个问题的明确当前答案,因为标准和浏览器支持似乎一直在不断变化。 根据标准,在“复制”事件处理程序中使用 event.clipboardData.setData 更改剪贴板
我发现以下函数允许我在用户粘贴文本时获取数据。 document.addEventListener('paste', function (evt) { console.log(evt.clipbo
event.originalEvent.clipboardData.getData('Text').match(/[^\d]/)) 在上面的代码中,我不理解originalEvent和clipboar
在我的 search 中以 Javascript 方式以编程方式选择 WebView 内容,我遇到了 this Javascript code snippet ,它在窗口对象中名为 clipboard
在我的 Karma-Jasmine 测试中,我必须测试我的 onPaste 方法。 onPaste 方法: onPaste(event: any): void { const pastedText
在我们的应用程序中,我们有一个自定义粘贴函数,它调用 window.clipboardData.getData("Text") 来获取当前剪贴板数据。然后它对该数据执行一些功能。在 Edge 中,wi
这是抛出错误的代码,不知道为什么,它曾经与 Chrome 一起使用。我现在使用 Chromium,它抛出错误 Uncaught TypeError: Cannot read property 'len
我有这个 javascript 函数: function maxLengthPaste(field,maxChars) { event.returnValue=false; if((f
我想阻止在我的网站上打印屏幕。我用了但它在 chrome 和 mozilla firefox 中不起作用 $(document).keyup(function(e){ if(!e) e = w
我正在尝试在文本区域上实现最大长度。在 IE7 中,window.clipboardData.getData("Text") 返回正确的复制字符数。在 IE8 中,相同的调用返回 0。有什么问题吗?
我是一名优秀的程序员,十分优秀!