API
nsh/clipboard
nsh/clipboard 读写系统剪贴板上的文本:iOS 上是 UIPasteboard,Android 上是 ClipboardManager,Web 上是 navigator.clipboard。
import { Clipboard } from "nsh/clipboard";
const Clipboard: {
setString(text: string): void;
getString(): Promise<string>;
hasString(): Promise<boolean>;
};
用户也可以自己从可选文本中复制;Clipboard 用于在代码中复制,比如“复制”按钮。
#Clipboard.setString
setString(text: string): void;
把 text 放到剪贴板上,替换原有内容。
import { signal, Text, View } from "nsh";
import { Clipboard } from "nsh/clipboard";
const copied = signal(false);
<View
onPress={() => {
Clipboard.setString(code);
copied.set(true);
}}
>
<Text>{copied() ? "已复制" : "复制"}</Text>
</View>;
#Clipboard.getString
getString(): Promise<string>;
返回剪贴板上的文本,没有文本时返回 ""。在 iOS 上,读取剪贴板可能会显示系统的粘贴提示(“某应用从……粘贴”);在 Android 10 及以上,只有前台应用才能读取。请在用户要求粘贴时再读取,而不是每进入一个页面就读。
const pasted = await Clipboard.getString();
if (pasted) code.set(pasted.trim());
#Clipboard.hasString
hasString(): Promise<boolean>;
返回剪贴板上是否有文本,但不读取它:iOS 上不会出现粘贴提示。可以用它决定是否显示“粘贴”按钮。在 Web 上,浏览器只能通过读取来判断,因此可能会请求用户授权。
const canPaste = signal(false);
Clipboard.hasString().then((has) => canPaste.set(has));