剪贴板
本指南描述了如何在 JxBrowser 中使用剪贴板。
前提条件
剪贴板仅在安全上下文中且 Browser 处于聚焦状态时工作。
必要的权限
当使用 navigator.clipboard
对象来访问剪贴板时,Browser 需要相应的权限。默认情况下,这些必要的权限是被拒绝的。以下是如何授予这些权限的说明:
engine.permissions().set(RequestPermissionCallback.class, (params, tell) -> {
var type = params.permissionType();
if (type == PermissionType.CLIPBOARD_READ_WRITE
|| type == PermissionType.CLIPBOARD_SANITIZED_WRITE) {
tell.grant();
} else {
tell.deny();
}
});
engine.permissions.register(RequestPermissionCallback { params, tell ->
val type = params.permissionType()
when (type) {
PermissionType.CLIPBOARD_READ_WRITE -> tell.grant()
PermissionType.CLIPBOARD_SANITIZED_WRITE -> tell.grant()
else -> tell.deny()
}
})
当通过用户交互(如鼠标点击)将结果写入剪贴板时,Browser 需要 CLIPBOARD_SANITIZED_WRITE
权限。在其他情况下,Browser 需要 CLIPBOARD_READ_WRITE
权限。
使用文档命令
上述权限对 document.execCommand('copy')
无效。默认情况下,此命令是禁用的。要启用它,请运行以下代码:
browser.settings().allowJavaScriptAccessClipboard();
browser.mainFrame().ifPresent(frame -> {
frame.executeJavaScript("document.execCommand('copy')");
});
browser.settings.canJavaScriptAccessClipboard = true
browser.mainFrame?.executeJavaScript<Boolean>("document.execCommand('copy')")
当使用 JxBrowser API 执行相同的命令时,不需要任何设置或权限。要使用文档命令复制内容,请运行以下代码:
browser.mainFrame().ifPresent(frame -> {
frame.execute(EditorCommand.copy());
});
browser.mainFrame?.execute(EditorCommand.copy())