ボタンが付いたシンプルなページがあります。ボタンを押すと、非同期クリップボードAPIを使用してクリップボードに書き込みます。
<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));
}
これは、ChromeとFirefox、デスクトップとモバイルの両方で機能します。ただし、Android Webviewでは次のエラーがスローされます。
NotAllowError: Write permission denied.
WebChromeClient.onPermissionRequest()
権限を付与するためにオーバーライドする必要があると考えましたが、不思議なonPermissionRequest()
ことに呼び出されていないようで、同じエラーがまだスローされます。
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());
}
私はまだ同じエラーが出ます:
NotAllowError: Write permission denied.
また、Logcatは何もログに記録しませんでした。
私のAndroidアプリにはクリップボードにアクセスするための追加の権限が必要なのではないかと疑っていますが、https://developer.android.com/about/versions/10/privacy/changes#clipboard-dataによると、アプリにはフォーカスがあるときに権限が必要です。実際、次のコードは機能します。
ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
ClipData clip = ClipData.newPlainText("MyLbl", "I have permission");
clipboard.setPrimaryClip(clip);
また、AndroidManifest.xml
許可を要求するアクションに許可が必要な場合に備えて、次のことを宣言しました。
<uses-permission android:name="android.webkit.PermissionRequest" />
これは何もしませんでした。
したがって、それはおそらくアプリレベルの権限の問題ではありません。
何が起こっている?
非同期クリップボードAPI呼び出しをWebviewで機能させるにはどうすればよいですか?
OS:Android 10 Q
Webview:v。81.0.4044.111
onPermissionRequest()
実際には呼び出されませんでした。