Saya memiliki halaman sederhana dengan tombol, yang ketika ditekan, menggunakan Async Clipboard API untuk menulis ke clipboard.
<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));
}
Ini berfungsi baik di Chrome dan Firefox, desktop dan seluler. Namun di Android Webview ia melempar kesalahan berikut:
NotAllowError: Write permission denied.
Saya pikir saya perlu mengganti WebChromeClient.onPermissionRequest()
untuk memberikan izin, tetapi anehnya onPermissionRequest()
tampaknya tidak dipanggil, dan kesalahan yang sama masih terjadi.
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());
}
Saya tetap mengalami masalah yang sama:
NotAllowError: Write permission denied.
Logcat juga tidak mencatat apa pun.
Saya menduga mungkin Aplikasi Android saya memerlukan izin tambahan untuk mengakses clipboard, tetapi menurut https://developer.android.com/about/versions/10/privacy/changes#clipboard-data , Aplikasi saya harus memiliki izin ketika memiliki fokus . Memang, kode berikut berfungsi:
ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
ClipData clip = ClipData.newPlainText("MyLbl", "I have permission");
clipboard.setPrimaryClip(clip);
Saya juga menyatakan sebagai berikut AndroidManifest.xml
jika tindakan meminta izin memerlukan izin:
<uses-permission android:name="android.webkit.PermissionRequest" />
Ini tidak melakukan apa pun.
Jadi itu mungkin bukan masalah dengan izin tingkat Aplikasi.
Apa yang terjadi?
Bagaimana saya bisa mendapatkan panggilan API Async Clipboard untuk bekerja di Webview?
OS: Android 10 Q
Webview: v. 81.0.4044.111
onPermissionRequest()
sebenarnya tidak pernah dipanggil.