2017-02-10 21 views
9

Tôi đang gặp vấn đề rất thú vị. Tôi sử dụng inAppBrowser và spinner trong một ứng dụng Android của tôi. Spinner được triển khai với ProgressDialog. Vấn đề ở đây là khi tôi cố gắng để mở một trang web thông qua inAppBrowser và tải spinner bắt đầu tải một khi trang bắt đầu tải và sau đó đóng một khi nó đã tải xong trang, khi tôi gõ vào lĩnh vực đầu vào của trang đó và cố gắng gõ chữ hoặc số, nó chỉ nằm trong trạng thái "bị khóa". Nếu tôi gõ một cái gì đó tôi không thể nhìn thấy chúng, con trỏ chỉ cần nhấp nháy.Không thể nhập vào trường nhập sau khi tải trang bằng InAppBrowser và tải spinner

Để làm điều này trở nên kỳ lạ hơn, tôi có thể nhập các ký tự đặc biệt. Nếu tôi nhấn vào bất kỳ địa điểm nào khác xung quanh trang, sau đó nhấn lại vào trường nhập tương tự, sau đó nó hoạt động. Một trường hợp khác khi nó hoạt động là khi tôi đặt ứng dụng vào trạng thái Tạm dừng và sau đó tiếp tục lại, các trường nhập hoạt động.

Sự cố này chỉ xảy ra trong các nền tảng Android phiên bản 5.0.1 trở lên.

Tệp java inAppBrowser có thể được tìm thấy trong Github tại InAppBrowser java file.

thực hiện spinner của tôi là như sau:

spinner = new ProgressDialog(cordova.getActivity()); 
spinner.setIndeterminate(false); 
spinner.setProgressStyle(ProgressDialog.STYLE_SPINNER); 
spinner.setCancelable(false); 
spinner.setMessage(cordova.getActivity().getText(R.string.spinner_loading)); 
spinner.setTitle(""); 

và tôi hiển thị/ẩn một spinner với cách sau:

@Override 
public void onPageStarted(WebView view, String url, Bitmap favicon) { 
    super.onPageStarted(view, url, favicon); 
    //InAppBrowser default code.... 

    try { 
     JSONObject obj = new JSONObject(); 
     obj.put("type", LOAD_START_EVENT); 
     obj.put("url", newloc); 

     sendUpdate(obj, true); 

    } catch (JSONException ex) { 
     Log.d(LOG_TAG, "Should never happen"); 
    } 

    spinner.show(); 
} 

public void onPageFinished(WebView view, String url) { 
    super.onPageFinished(view, url); 
    try { 
     JSONObject obj = new JSONObject(); 
     obj.put("type", LOAD_STOP_EVENT); 
     obj.put("url", url); 

     sendUpdate(obj, true); 

    } catch (JSONException ex) { 
     Log.d(LOG_TAG, "Should never happen"); 
    } 

    spinner.hide(); 
} 

gì có thể là vấn đề ở đây? Bất kỳ lời khuyên, đề nghị sẽ được đánh giá cao.

+0

Bạn có thể gỡ lỗi ứng dụng trong thiết bị bằng cách sử dụng trình kiểm tra chrome và kiểm tra xem có bất kỳ lỗi nào trong bảng điều khiển không? – Gandhi

+0

@Gandhi: Tôi đã sửa nó rồi, cảm ơn lời bình luận. –

Trả lời

5

Bây giờ tôi đã có thể khắc phục sự cố. Vấn đề là trọng tâm của trường nhập trang cụ thể đó. Đối với một số lý do nó đã không tập trung vào chính nó một khi trang đã được tải xong.

Cố gắng khắc phục sự cố trong tệp inAppBrowser.java trongAppBrowser bằng cách sử dụng editText.clearFocus() và sau đó editText.requestFocus() không giúp gì cả. Nhưng những gì làm việc cho tôi là sau giải pháp.

Vì inAppBrowser có phương thức được gọi là executeScript(), tôi đã có thể tiêm một số mã Javascript vào trường nhập cụ thể có vấn đề này. Do đó, mã sau đã thực hiện thủ thuật:

var ref = cordova.InAppBrowser.open('http://apache.org', '_blank', location=yes'); 
ref.addEventListener('loadstop', function() { 
    ref.executeScript({code: "$('#element').blur(); $('#element').focus();"}); 
}); 

Mã nào làm đầu tiên là xóa tiêu điểm ra khỏi phần tử cụ thể đó và sau đó tập trung vào yếu tố đó một lần nữa.

Điều này được bật để hoạt động trên mọi nền tảng bất kể phiên bản nào là điều lớn.

+0

Xin chào, Bạn đã tập trung vào url như thế nào? nó đã không làm việc cho tôi trong ionic 3, tôi cần phải tập trung vào url để tôi có thể gõ url mới và đi qua như bình thường trình duyệt có thể giúp tôi duyệt nhiều trang web. Tôi có thể làm điều này theo cách này không? –

0

Nếu ai đó vẫn gặp vấn đề này với tôi, hãy thử cập nhật trình cắm InAppBrowser lên phiên bản cuối cùng (1.7.2).

ionic cordova plugin rm cordova-plugin-inappbrowser --save 
ionic cordova plugin add cordova-plugin-inappbrowser --save 

Phiên bản 1.7.2 có này fix

tôi đang sử dụng Ionic (v3).

Các vấn đề liên quan