Ich habe eine einfache Seite mit einer Schaltfläche, die beim Drücken die asynchrone Zwischenablage-API verwendet, um in die Zwischenablage zu schreiben.
<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));
}
Dies funktioniert sowohl auf Chrome als auch auf Firefox, auf dem Desktop und auf Mobilgeräten. Auf Android Webview wird jedoch der folgende Fehler ausgegeben:
NotAllowError: Write permission denied.
Ich dachte, ich muss überschreiben WebChromeClient.onPermissionRequest()
die Erlaubnis zu erteilen, aber seltsam onPermissionRequest()
scheint nicht aufgerufen worden zu sein, und derselbe Fehler wird immer noch ausgegeben.
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());
}
Ich bekomme immer noch den gleichen Fehler:
NotAllowError: Write permission denied.
Auch Logcat hat nichts geloggt.
Ich vermutete, dass meine Android-App möglicherweise zusätzliche Berechtigungen für den Zugriff auf die Zwischenablage benötigt, aber laut https://developer.android.com/about/versions/10/privacy/changes#clipboard-data, sollte meine App die Berechtigung haben, wenn sie den Fokus hat. In der Tat funktioniert der folgende Code:
ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
ClipData clip = ClipData.newPlainText("MyLbl", "I have permission");
clipboard.setPrimaryClip(clip);
Folgendes habe ich auch deklariert in AndroidManifest.xml
falls die Aktion des Anforderns einer Erlaubnis eine Erlaubnis erfordert:
<uses-permission android:name="android.webkit.PermissionRequest" />
Das hat nichts gebracht.
Es ist also wahrscheinlich kein Problem mit der Berechtigung auf App-Ebene.
Was ist los?
Wie kann ich API-Aufrufe für die asynchrone Zwischenablage in Webview zum Laufen bringen?
Betriebssystem: Android 10 Q
Webansicht: v. 81.0.4044.111
Ähnliche Frage, auch keine Antwort: stackoverflow.com/questions/61429649/…
– BDL
26. April 2020 um 9:36 Uhr
Ich weiß nichts über Android, aber dieser Artikel von Google bezieht sich auf die Nutzung der Permissions API (des Browsers).
– Ketzeraffe
27. April 2020 um 12:55 Uhr
Könnte ein Fehler sein.
– Travis J
28. April 2020 um 2:42 Uhr
@hereticMonkey danke für den Link, aber ich glaube nicht, dass er etwas ändert. Es heißt: “Der Versuch, Daten aus der Zwischenablage zu lesen oder zu schreiben, wird den Benutzer automatisch um Erlaubnis bitten, wenn sie noch nicht erteilt wurde”, was bedeutet, dass es keine explizite Möglichkeit gibt, diese Erlaubnis in JS anzufordern, außer nur zu versuchen, die Zwischenablage zu verwenden, was ich glauben ist wahr. Wie in der Frage erwähnt, wenn ich das in einer Webview-Umgebung mache,
onPermissionRequest()
wurde tatsächlich nie aufgerufen.– cyqsimon
28. April 2020 um 9:30 Uhr