Ho una semplice pagina con un pulsante che, se premuto, utilizza l'API Async Clipboard per scrivere negli appunti.
<body>
<button type="button" onclick="testClipboard();">
Test Clipboard
</button>
</body>
function testClipboard() {
navigator.clipboard.writeText("Clipboard API Test").then(
v => alert("Success"),
e => alert("Fail\n" + e));
}
Funziona su Chrome e Firefox, desktop e mobile. Tuttavia su Android Webview genera il seguente errore:
NotAllowError: Write permission denied.
Ho pensato di dover eseguire l'override WebChromeClient.onPermissionRequest()
per concedere l'autorizzazione, ma stranamente onPermissionRequest()
non sembra essere stato invocato e lo stesso errore viene ancora generato.
public class WebChromeController extends WebChromeClient {
@Override
public void onPermissionRequest(PermissionRequest request) {
Log.d("myTag", "Permission request");
Log.d("myTag", request.getResources().toString());
request.grant(request.getResources());
}
}
protected void initWebView() {
// ...
myWebView.setWebChromeClient(new WebChromeController());
}
Ottengo ancora lo stesso errore:
NotAllowError: Write permission denied.
Anche Logcat non ha registrato nulla.
Sospettavo che forse la mia app per Android richiedesse ulteriori autorizzazioni per accedere agli Appunti, ma secondo https://developer.android.com/about/versions/10/privacy/changes#clipboard-data , la mia app dovrebbe avere l'autorizzazione quando è attiva . In effetti, il seguente codice funziona:
ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
ClipData clip = ClipData.newPlainText("MyLbl", "I have permission");
clipboard.setPrimaryClip(clip);
Ho anche dichiarato quanto segue nel AndroidManifest.xml
caso in cui l'azione di richiesta di autorizzazione richieda l'autorizzazione:
<uses-permission android:name="android.webkit.PermissionRequest" />
Questo non ha fatto nulla.
Quindi probabilmente non è un problema con l'autorizzazione a livello di app.
Che cosa sta succedendo?
Come posso far funzionare le chiamate API degli Appunti Async in Webview?
Sistema operativo: Android 10 Q
Webview: v. 81.0.4044.111
onPermissionRequest()
in realtà non è mai stato invocato.