버튼이있는 간단한 페이지가 있는데, 누르면 클립 보드 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은 아무것도 기록하지 않았습니다.
내 안드로이드 앱에 클립 보드에 액세스 할 수있는 추가 권한이 필요하다고 생각했지만 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" />
이것은 아무것도하지 않았다.
따라서 앱 수준 권한에는 문제가되지 않습니다.
무슨 일이야?
Webview에서 비동기 클립 보드 API 호출을 사용하려면 어떻게해야합니까?
운영체제 : Android 10 Q
웹뷰 : v. 81.0.4044.111
onPermissionRequest()
실제로 호출 된 적이 없습니다.