List icon Conteúdo

Área de transferência

Este guia descreve como utilizar a área de transferência no JxBrowser.

Pré-requisitos

A área de transferência só funciona em contextos seguros e quando o navegador está em foco.

Autorizações necessárias

Ao utilizar o objeto navigator.clipboard para acessar à área de transferência, o navegador requer permissões. Por padrão, as permissões necessárias são negadas. Eis como concedê-las:

Java
Kotlin

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()
    }
})

Quando a escrita na área de transferência resulta de uma interação do usuário, como um clique do mouse, o browser requer a permissão CLIPBOARD_SANITIZED_WRITE. Em outros casos, o browser requer a permissão CLIPBOARD_READ_WRITE.

Utilizar comandos de documentos

As permissões listadas acima não têm efeito sobre document.execCommand('copy'). Este comando está desativado por padrão. Para ativá-lo, execute o seguinte código:

Java
Kotlin

browser.settings().allowJavaScriptAccessClipboard();
browser.mainFrame().ifPresent(frame -> {
    frame.executeJavaScript("document.execCommand('copy')");
});

browser.settings.canJavaScriptAccessClipboard = true
browser.mainFrame?.executeJavaScript<Boolean>("document.execCommand('copy')")

Ao executar o mesmo comando utilizando a API JxBrowser, não são necessárias definições ou permissões. Para copiar conteúdo utilizando o comando document, execute:

Java
Kotlin

browser.mainFrame().ifPresent(frame -> {
    frame.execute(EditorCommand.copy());
});

browser.mainFrame?.execute(EditorCommand.copy())