在我们的应用程序中,我们有一个定制的粘贴函数,它调用window.clipboardData.getData("Text")来获取当前的剪贴板数据。然后,它对这些数据执行一些功能。在边缘中,window.clipboardData未定义。在“粘贴”事件中使用getData似乎是有效的,但如下所示。
document.addEventListener("paste", function(e) {
var test = e.clipboardData.getData("text/plain");
});我可能会设计一个解决方案,这将涉及这个覆盖粘贴事件,但这将是不理想的。一个可以在事件之外调用的解决方案会更好。
顺便提一下,我读到Edge在某一时刻不支持剪贴板API,但我的理解是这是固定的,所以请找到一些特定的东西来支持当前的功能(如果这是您的答案,e.clipboardData可以工作,但不等同于window.clipboardData。
发布于 2018-11-12 23:51:30
Edge,像所有现代浏览器一样使用正式的剪贴板事件::clipboardData
inp.onpaste = evt =>
console.log(evt.clipboardData.getData('text'));<input id="inp">
随它去吧。对于旧版本的IE,不推荐的和非标准的窗口::clipboardData只应用作遗留支持的手段。
至于您希望做什么(粘贴没有用户交互),这与隐私规范建议背道而驰。你将无法从网络内容。您需要从高权限脚本(如扩展名)运行脚本。
·实现不能让脚本创建合成剪贴板事件来访问真正的剪贴板数据(除非用户已经将其配置为这样做)。
发布于 2018-11-14 14:29:37
正如凯伊多所指出的,不可能在边缘粘贴事件之外获取粘贴内容(而Chrome则是这样)。
用户以前使用自定义的右键菜单访问“从Excel中粘贴”功能,用剪贴板中以标签分隔的内容替换可编辑网格中的内容。如果window.clipboardData是未定义的,则用户收到一条消息,表示必须在此浏览器中使用标准的CTRL+V粘贴。
然后,我在下面添加了监听器,它本质上决定了内容是否为制表符分隔,并将其视为“从Excel粘贴”,而将其他数据布局视为标准的“粘贴”。对于我的部署来说,这已经足够了,但对于其他人来说,启动一个确认窗口来验证意图可能是值得的。
document.getElementById(myGridID).addEventListener("paste", function(e) {
var clipboardContent = window.clipboardData ? window.clipboardData.getData("Text") : (e.clipboardData ? e.clipboardData.getData("text/plain") : "");
if(clipboardContent != null && clipboardContent.indexOf('\t') >= 0)
{
MyExcelPasteFunction(myGridID, clipboardContent);
e.preventDefault();
}
});https://stackoverflow.com/questions/53271387
复制相似问题