我一直试图将我的P标签的内容复制到我的剪贴板,没有任何按钮点击。
我尝试了完美的按钮点击。这是我的onClick的工作代码。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
</head>
<body>
<p id="p1">Copied..</p>
<button onclick="copyToClipboard('#p1')" id="ashvin">Copy</button>
</body>
</html>
<script>
function copyToClipboard(element) {
console.log('+++++++++++++++++++++++++++++++');
var $temp = $("<input>");
$("body").append($temp);
$temp.val($(element).text()).select();
var status = document.execCommand("copy");
if(status){
console.log("=======done")
}else{
console.log("=======error")
}
$temp.remove();
}
</script>
它正在按钮点击很好,但我想复制页面加载而不是单击。
任何帮助将不胜感激。谢谢!
许多document.execCommand方法(如复制)需要用户交互(如点击),因为使用自动方法(如系统要求)访问剪贴板(系统级而非浏览器级)会被视为安全风险。您可能需要通过复制页面加载来重新思考您要实现的目标。
上面的用例是什么,也许有人可以帮助您的方案?
[edit]这是一个link,它在codepen上显示你的脚本。当你“运行”页面时它应该给出“没有工作”的输出,当你点击它按钮它应该给出“工作”输出
<!DOCTYPE html>
<html lang="en">
<head>
<script
src="https://code.jquery.com/jquery-3.3.1.min.js"
integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8="
crossorigin="anonymous"></script>
<script>
function copyToClipboard(element) {
var $temp = $("<input>");
$("body").append($temp);
$temp.val($(element).text()).select();
var status = document.execCommand("copy");
if(status){
$("#output").text("worked")
}else{
$("#output").text("didn't work")
}
$temp.remove();
}
</script>
</head>
<body onload="copyToClipboard('#p1')">
<p id="p1">Text to copy on page load, but won't work</p>
<button onclick="copyToClipboard('#p1')">Copy the text</button>
<p id="output"></p>
</body>
</html>
如果这是针对本地项目(即不在公共领域),可能会在chrome中设置标记以覆盖安全风险,但我不知道它们是什么或者它们是否存在,但可能是值得一看。
[更新编辑]我很困惑。这感觉就像一个彻头彻尾的黑客,但它对我有用(在glitch.com上),所以我可能会站得更正。我使用了原生的navigator.clipboard.writeText方法,当我同时尝试两种方法(在chrome中)测试两种方法都不起作用时,它也无法正常工作,它确实适用于“导航器” “一个。事实证明,如果我在执行promise之前将document.execCommand置于某处,那么它似乎可以正常工作。但它不适用于codepen或内联脚本引擎(可能与iframes等有关吗?)。请问有人检查我的理智吗?
<!DOCTYPE html>
<html lang="en">
<head>
<script>
function copyToClipboard(element) {
document.execCommand("copy");
var text = document.querySelector(element).textContent;
var output = document.getElementById("output");
navigator.clipboard.writeText(text).then(function() {
output.textContent = "worked";
}, function() {
output.textContent = "didn't work";
});
}
</script>
</head>
<body onload="copyToClipboard('#p1')">
<p id="p1">Text to copy on page load.</p>
<button onclick="copyToClipboard('#p1')">
Click to copy text
</button>
<p id="output"></p>
</body>
</html>
在document.body.onload()
上编写函数或添加事件监听器。 document.body.addEventListener("load", copyToClipboard);
或简单地说
<body onload=copyToClipboard('#p1')>
..
</body>
这不起作用,因为复制命令必须由用户的操作触发。看到这篇文章:https://w3c.github.io/editing/execCommand.html#dfn-the-copy-command
我想这个问题是重复的:Cannot use `document.execCommand('copy');` from developer console