Tôi có chế độ xem web với giao diện javascript được thêm vào hoạt động hoàn hảo trên hầu hết các thiết bị, ngoại trừ những thiết bị chạy Android 4.2.1.Android 4.2.1, giao diện WebView và javascript ngắt
Tôi đã gỡ bỏ hầu hết các mã, và ở lại với một mã rất cơ bản:
this.webView.getSettings().setJavaScriptEnabled(true);
this.webView.setWebChromeClient(new WebChromeClient());
this.webView.addJavascriptInterface(new Object() {
public void handshake() {
Log.d("JS", "handshake no params");
}
public void handshake(String json) {
Log.d("JS", "handshake with params: " + json);
}
}, "Android");
Ở phía bên javascript thứ mã thử nghiệm trông như thế này:
Android.handshake();
Nhưng tôi có được điều này trong logcat:
E/Web Console: Uncaught TypeError: Object [object Object] has no method 'handshake'
Một lần nữa, chính xác điều này cũng hoạt động tốt trên các thiết bị đang sử dụng e os android cũ hơn (< 4.2.1) mà tôi đã thử nghiệm (phiên bản tối thiểu là 2.3.3). Điều lạ lùng là nếu tôi bắt đầu một dự án hoàn toàn mới, không có gì ngoài một Hoạt động đơn lẻ chỉ có WebView, với cùng mã, mọi thứ hoạt động tốt ngay cả đối với 4.2.1, nhưng khi nó là một phần của thực tế của tôi dự án, mọi thứ phá vỡ. Không có gì tôi đang làm với chế độ xem web không được bao gồm trong đoạn mã này mà tôi đã cung cấp.
Điều kỳ lạ nhất đối với tôi là javascript tìm thấy đối tượng Android nhưng nó không có phương thức được yêu cầu (bắt tay), làm cách nào có thể?
Bất kỳ trợ giúp nào sẽ được đánh giá rất cao vì điều này đã khiến tôi phát điên trong 2 tuần qua (đó là lỗi tôi luôn quay lại, sau đó bỏ cuộc, v.v.). Cảm ơn.
Ngoài ra, bạn phải đặt minSdkVersion> = 17, là 4,2, Jelly bean MR1. Trừ khi, nó sẽ làm chính xác những gì @ Nitzan-Tomer mô tả. Lý do của hành vi này là do các sự cố bảo mật của Android. –