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));