剪贴板示例

本示例演示如何把文本复制到剪贴板。它取自 Ninext 示例应用中的 Copy / Paste data 示例。
Ninox
function copyToClipboard(text : text) do
#{ navigator.clipboard.writeText(text) }#
end;该代码块没有类型注解:它只执行操作,不返回任何值。像 :text 这样的注解表示会有一个值,需要通过 return 返回;自 3.2.0 版起,错误标签页会标出不返回任何值的带类型代码块。
navigator.clipboard.writeText() 的使用限制
navigator.clipboard.writeText(text) 这个 API 受到浏览器强制执行的安全限制。它必须由用户交互(例如点击按钮)直接触发。
如果在用户交互与调用 writeText() 之间出现延迟或中间处理(例如某项计算),浏览器就不再认为该操作是由用户发起的,会阻止访问剪贴板以防滥用。
最佳实践
- 直接在用户事件处理程序(例如
onclick)中调用navigator.clipboard.writeText(text)。 - 避免在用户操作与函数调用之间引入异步操作或延迟。
正确示例:
Ninox
document.getElementById("copyButton").addEventListener("click", () => {
navigator.clipboard.writeText("Copied text!")
.then(() => console.log("Text copied successfully!"))
.catch(err => console.error("Error copying text:", err));
});错误示例(可能无法工作):
Ninox
document.getElementById("copyButton").addEventListener("click", () => {
setTimeout(() => { // Introducing a delay may prevent copying
navigator.clipboard.writeText("Copied text!");
}, 100);
});