不能将 document.execCommand('copy') 与输入类型文件一起使用
can't use document.execCommand('copy') with input type file
无法将文本区域的内容复制到剪贴板使用以下代码。
<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>
而如果我在 if 块返回语句中的setTimeout(call,100)
后添加一个alert()
。
正在复制文本。
在Chrome,Opera和Firefox上尝试过,每个浏览器都以相同的方式响应。
我正在使用上述结构来复制用户打开的文件的base64编码文本。
大多数浏览器只会以这种方式从 Javascript 将文本复制到剪贴板,该文本直接从真实用户事件(如单击或键)而不是从setTimeout()
启动。 因此,如果您的代码采用setTimeout()
路径,则很可能无法将文本复制到剪贴板。 您不能只制造按键事件 - 此限制的重点是需要真实的用户事件,而不是由代码制造的事件。
如果您有兴趣,这里有一个经过测试的函数,可以将文本复制到此答案中的剪贴板。 它与任何其他代码具有相同的限制 - 它必须从由真实用户事件调用的Javascript启动,并且它适用于现代版本的Chrome,Firefox和IE,但不适用于Safari。
相关文章:
- 使用模式格式化Number类型输入中的值
- 在 JavaScript 中单击函数时两个日期类型输入之间的差异的代码
- 在codeigneter中按类型输入框显示数据库中的数据
- 已从'上传文件;文件'img字段中未显示类型输入字段
- 如何使用ReactTestUtils设置HTML5文件类型输入
- 检测用户拖动范围类型输入
- 无法在使用 Java 脚本创建的表单中设置提交类型输入
- 按钮类型输入上的点击事件不起作用
- 如何使用javascript更改隐藏类型输入字段的值
- sap.m中的自定义输入类型.输入sap-ui5
- 如何使用jquery动态添加/删除文件类型输入字段
- 提交事件未捕获提交类型输入
- Jquery - info/docs关于适用于表单中不同类型输入元素的属性列表
- 从Mobile Safari'日期/时间类型输入字段触发哪些事件?
- 饼状图II -动态值从范围类型输入
- 我可以在文件类型输入中显示文件大小吗?
- 新的webkit在数字类型输入中将十进制逗号转换为~ dot,反之亦然.该浏览器特性的Javascript名称
- 如何在javascript中验证具有相同名称的多个相同类型输入
- 邮件类型输入:如果邮件错误或正确,动态改变按钮的颜色/文本
- 如何将文件类型输入传递到javascript中,并将其用于另一个php页面