我有一个带有按钮的简单页面,当按下按钮时,该页面使用Async Clipboard 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中工作?
操作系统:Android 10 Q
网页检视:v。81.0.4044.111
onPermissionRequest()
实际上从未被调用过。