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) -> {
    PermissionType type = params.permissionType();
    if (type == PermissionType.CLIPBOARD_READ_WRITE) {
        tell.grant();
    } else if (type == PermissionType.CLIPBOARD_SANITIZED_WRITE) {
        tell.grant();
    } else {
        tell.deny();
    }
});
engine.permissions().set(RequestPermissionCallback { params, tell ->
    val type = params.permissionType()
    if (type == PermissionType.CLIPBOARD_READ_WRITE) {
        tell.grant()
    } else if (type == 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().allowJavaScriptAccessClipboard()
browser.mainFrame().ifPresent { frame ->
    frame.executeJavaScript("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().ifPresent { frame ->
    frame.execute(EditorCommand.copy())
}