Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在浏览器JavaScript中,我在将csv文本写入剪贴板时收到错误消息_Javascript_Google Chrome_Dom_Navigator - Fatal编程技术网

在浏览器JavaScript中,我在将csv文本写入剪贴板时收到错误消息

在浏览器JavaScript中,我在将csv文本写入剪贴板时收到错误消息,javascript,google-chrome,dom,navigator,Javascript,Google Chrome,Dom,Navigator,在浏览器JavaScript中,我试图将一些CSV数据写入剪贴板,以便用户可以粘贴到excel。这是我的密码: function onClick(){ var txt=get_some_valid_csv_text() var items=[ new ClipboardItem({ 'text/csv': new Blob([txt], { type: 'text/csv' }) }) ]

在浏览器JavaScript中,我试图将一些CSV数据写入剪贴板,以便用户可以粘贴到excel。这是我的密码:

function onClick(){
      var txt=get_some_valid_csv_text()
      var items=[
          new ClipboardItem({
            'text/csv': new Blob([txt], { type: 'text/csv' })
          })
        ]
      navigator.clipboard.write(items)
}
问题:它不工作,我在控制台中收到以下错误消息:

未捕获(承诺中)DomeException:未清理MIME类型文本/csv 支持写操作

这是我能找到的全部,
“如果在复制和剪切事件期间将这些数据类型添加到数据传输对象,则这些数据类型必须与相应的本机类型描述一起放在剪贴板上。”
我真的不明白:(但我希望它能帮上忙:)

Chrome仍然是,虽然要求UAs支持一系列MIME类型,但他们目前只支持
“text/plain”和
“image/png”

因此,目前,我们仍然必须依靠丑陋的
execCommand('copy')
+连接复制事件来设置我们自己的数据

document.querySelector('button')。onclick=(e)=>{
常量数据=`A1,B1
A2,B2
A3,B3`;
document.oncopy=e=>{
e、 preventDefault();//我们处理它
常数dT=e.clipboardata;
dT.setData('text/plain','这是纯文本');//作为纯文本
dT.setData('text/csv',data);//作为csv
}
document.execCommand('copy');
document.oncopy=null;
};
//检查我们复制的内容
document.querySelector('div[contenteditable]')。onpaste=e=>{
e、 预防默认值();
常数dT=e.clipboardata;
console.log('检索到的“%s”为csv',dT.getData('text/csv');
console.log('检索到的“%s”为text',dT.getData('text/plain');
};
复制到剪贴板

粘贴到这里
我刚刚试着找到了一个错误的答案。秘密似乎在于使用csv格式的文本,并使用制表符作为分隔符,而不是逗号。不需要ClipboardIteminterface,可以直接使用
navigator.clipboard.writeText

这是新代码

function onClick(){
      var txt=get_some_valid_csv_text(sep='\t')
      navigator.clipboard.writeText(txt)
}

CSV本质上是文本,使用
text/plain
而不是
text/CSV
对您有效吗?@FlorentRoques否,因为它会像excel中的文本一样粘贴,所以用户需要在excel中进一步处理它。很可能是excel的文本到数据功能。这段代码是在安全(HTTPS)网站上还是在web扩展中?@JaromandaX,它运行在HTTPS@kaido,我刚试过,但似乎没有任何效果。只有dT.setData('text/plain','this is plain text')起作用。不管怎样,我认为我找到了解决办法,它比我想象的要简单得多。看到我的答案了吗below@yigal,是的,我从来没有说过Excel试图读取剪贴板的文本/csv部分,我只是说,要使用这种MIME类型进行保存,您仍然需要难看的解决方法。这是tsv,而不是csv。此外,即使它修复了您最初的问题,也不能真正回答问题。tsv是的,我从未听说过,但我只是查找了一下,它确实存在。此外,通过添加代码以替换逗号,您可以轻松地调整代码以回答初始问题。使用tab
txt.replace(',','\t')
No,初始问题是关于抛出的错误。