ฉันมีหน้าง่าย ๆ ด้วยปุ่มซึ่งเมื่อกดใช้ 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" />
นี่ไม่ได้ทำอะไรเลย
ดังนั้นจึงอาจไม่มีปัญหากับการอนุญาตระดับแอป
เกิดอะไรขึ้น?
ฉันจะรับการเรียก Async Clipboard API ให้ทำงานใน Webview ได้อย่างไร
ระบบปฏิบัติการ: Android 10 Q
มุมมองเว็บ: v. 81.0.4044.111
onPermissionRequest()
ในความเป็นจริงไม่เคยถูกเรียก