以纯文本形式复制到剪贴板
Copy to clipboard as plain text
我在Chrome扩展background.js
中使用此代码将文本复制到用户的剪贴板:
chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse) {
if (request.command == "copy") {
executeCopy(request.text);
sendResponse({farewell: "copy request received"});
}
}
);
function executeCopy(text){
var copyDiv = document.createElement('div');
copyDiv.contentEditable = true;
document.body.appendChild(copyDiv);
copyDiv.innerHTML = text;
copyDiv.unselectable = "off";
copyDiv.focus();
document.execCommand('SelectAll');
document.execCommand("Copy", false, null);
document.body.removeChild(copyDiv);
}
用格式复制文本。如何以无格式的纯文本复制文本?
您的问题代码包含一个称为XSS的常见安全问题。因为您接受了不受信任的输入并将其分配给.innerHTML
,所以您允许攻击者在您的文档上下文中插入任意HTML。
幸运的是,攻击者不能在扩展的上下文中运行脚本,因为扩展的默认内容安全策略禁止内联脚本。这个CSP在Chrome扩展中强制执行,正是因为这样的情况,以防止XSS漏洞。
正确的转换HTML到文本的方式是通过DOMParser
API。下面两个函数展示了如何将文本复制为文本,或者将HTML复制为文本:
// Copy text as text
function executeCopy(text) {
var input = document.createElement('textarea');
document.body.appendChild(input);
input.value = text;
input.focus();
input.select();
document.execCommand('Copy');
input.remove();
}
// Copy HTML as text (without HTML tags)
function executeCopy2(html) {
var doc = new DOMParser().parseFromString(html, 'text/html');
var text = doc.body.textContent;
return executeCopy(text);
}
注意.textContent
完全忽略HTML标记。如果您想将<br>
s解释为换行符,请使用非标准(但在Chrome中支持).innerText
属性而不是.textContent
。
这里有两个例子,说明XSS如何被滥用,使用你问题中的executeCopy
函数:
// This does not only copy "Text", but also trigger a network request
// to example.com!
executeCopy('<img src="http://example.com/">Text');
// If you step through with a debugger, this will show an "alert" dialog
// (an arbitrary script supplied by the attacker!!)
debugger;
executeCopy('<iframe src="data:text/html,<script>alert(/XXS-ed!/);<'/script>"></iframe>');
相关文章:
- 零剪贴板复制文本后切换页面
- 复制到剪贴板在safari-angularjs中不起作用
- 使用javascript代码将HTML元素复制到剪贴板
- “复制到剪贴板”不起作用
- 使用jQuery/Javascript将忽略表头的表的内容复制到剪贴板
- javascript中的复制到剪贴板功能
- 将属性模型复制到剪贴板
- WinJs 复制到 Windows Phone 的剪贴板
- JavaScript 自动将文本复制到剪贴板
- 只能在第二次单击时将副本复制到剪贴板
- 复制到剪贴板是't工作
- c#在浏览器SharePoint中将文本框的内容复制到剪贴板
- 如何使用jquery将多个按钮ID复制到剪贴板
- 复制到剪贴板在firefox25中不起作用
- jQuery zClip 不会将值复制到剪贴板
- 为什么一个值没有在javascript中复制到剪贴板
- 如何在Webkit中将基于画布的图形复制到剪贴板
- 如何在使用之前检测复制到剪贴板的功能
- AppJs 键盘快捷键(复制、粘贴、剪贴板、退出、全选...
- 如何编辑此代码HTML/CSS以使'选择'JS代码也复制2剪贴板