gpt4 book ai didi

javascript - 无法将 document.execCommand ('copy' )与输入类型文件一起使用

转载 作者:行者123 更新时间:2023-12-02 15:06:25 28 4
gpt4 key购买 nike

无法将文本区域的内容复制到剪贴板使用下面的代码。



<script>
function copyText()
{
document.getElementById('in').click();
call();
}
function call()
{
if(getComputedStyle(document.getElementById('butt')).opacity>0.5)
{setTimeout(call,100);return;}

var ta=window.document.createElement("textarea");
window.document.body.appendChild(ta);
ta.value="this text should be in clipboard";
ta.focus();
ta.selectionStart=0;
ta.selectionEnd=ta.value.length;
ta.addEventListener('keypress', function(){window.document.execCommand('copy');});
var event = new Event('keypress');
ta.dispatchEvent(event) ;
}
</script>
<button id='butt' onClick='copyText()'>copy text</button>
<input id='in' type='file' style='display:none;'/>
<style>
#butt
{opacity:0.5;}
#butt:hover
{opacity:1;}
</style>

如果我在 return 语句之前的 if block 中的 setTimeout(call,100) 之后添加 alert()
正在复制文本。
在 chrome、opera 和 firefox 上尝试过,每个浏览器的响应方式都相同。
我使用上述结构来复制用户打开的文件的 base64 编码文本。

最佳答案

大多数浏览器只会以这种方式从直接从真实用户事件(如单击或按键)启动的 Javascript 中将文本复制到剪贴板,而不是从 setTimeout() 启动。因此,如果您的代码采用 setTimeout() 路径,则将文本复制到剪贴板的操作可能不起作用。您不能只制造按键事件 - 这一限制的全部意义在于需要一个真实的用户事件,而不是由代码制造的事件。

如果您感兴趣,这里有一个经过测试的函数,用于将文本复制到 this answer 中的剪贴板。它与任何其他代码具有相同的限制 - 它必须从由真实用户事件调用的 Javascript 启动,并且它可以在现代版本的 Chrome、Firefox 和 IE 中运行,但不能在 Safari 中运行。

关于javascript - 无法将 document.execCommand ('copy' )与输入类型文件一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35099600/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com