2014-09-29 20 views
9

Tôi có một ứng dụng html5 mà tôi gói bằng một WebView. Để lưu trữ và truy xuất giá trị nhập của người dùng giữa các trang, tôi sử dụng tính năng localStorage html5.tính năng localStorage html5 không hoạt động trong WebView trên thiết bị Android của Samsung

Nó hoạt động tốt trên Nexus 4 của tôi (Android 4.4.4), nhưng nó không hoạt động trên Samsung Galaxy Tab 2 (Android 4.3.x) (= không có gì xảy ra, nhưng cũng không có lỗi trong logcat). Hoặc, để rõ ràng hơn: trên Samsung, nó không hoạt động nếu các trang html được tải từ trong thư mục nội dung của ứng dụng. Nó làm việc mặc dù nếu tôi đặt các trang trên một máy chủ, như dưới đây trong dòng outcommented.

Tuy nhiên, trên Nexus 4, tải từ tệp: /// android_asset/và cũng có thể tải trang trên trình duyệt trên máy tính để bàn (Chrome, Firefox) từ tệp: // path, nó cũng hoạt động.

Cập nhật 1: Tôi vừa có một người dùng khác báo cáo sự cố với thiết bị LG, vì vậy nó dường như không phải là Samsung cụ thể.

Cập nhật 2: Lưu trữ và tải giá trị từ localStorage hoạt động tốt trên tất cả các thiết bị trên cùng một trang, tuy nhiên, không phải giữa các trang khác nhau. Trong ví dụ của tôi, tôi có thể lưu trữ và truy xuất giá trị trên 01_home.html, nhưng khi tôi truy cập một trang khác trong thư mục android_asset, tôi không thể đọc nó nữa (trên các thiết bị LG, Samsung). Hoạt động tốt trên Nexus 4.

Dưới đây là các cài đặt của chế độ xem web.

webView = (WebView)this.findViewById(R.id.webView); 
    webViewClient = new MyWebViewClient(this); 
    webViewClient.setSm(sm); 
    webView.setWebViewClient(webViewClient); 
    WebSettings webSettings = webView.getSettings(); 
    webSettings.setJavaScriptEnabled(true); 
    webSettings.setDomStorageEnabled(true); 
    webView.getSettings().setJavaScriptEnabled(true); 
    webView.getSettings().setDomStorageEnabled(true); 
    webView.getSettings().setPluginState(WebSettings.PluginState.ON); 
    webView.getSettings().setAppCacheEnabled(false); 
    webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE); 
    webView.getSettings().setUseWideViewPort(true); 
    webView.getSettings().setLoadWithOverviewMode(true); 
    webView.getSettings().setBuiltInZoomControls(false); 
    webView.getSettings().setSupportZoom(false); 
    webView.getSettings().setDefaultZoom(WebSettings.ZoomDensity.FAR); 

    webView.loadUrl("file:///android_asset/01_home.html"); // does NOT work! 
    // webView.loadUrl("http://192.168.178.33/01_home.html"); // does work! 

đang lưu trữ địa phương tại các trang:

// storing 
var data = document.getElementById('data').value; 
window.localStorage.setItem((1), data); 

// reading 
document.getElementById('data').value = window.localStorage.getItem(1); 
+0

Topic trong danh sách phát triển Android: https://groups.google.com/forum/#!topic/ android-developers/gssOdQLroAY –

Trả lời

4

tôi thấy lỗi này giống nhau. Làm việc trên tất cả các thiết bị Nexus nhưng tất cả Các thiết bị Samsung đã mất các thay đổi của người dùng của tôi. Tôi biết phương thức dưới đây là không được chấp nhận nhưng nó đã giải quyết được vấn đề của tôi.

webview.getSettings().setDatabasePath("/data/data/" + webview.getContext().getPackageName() + "/databases/"); 
16

Có câu trả lời cho này được đăng ở nơi khác Android webview & localStorage

Giải pháp đề xuất:

webView.getSettings().setDomStorageEnabled(true); 
webView.getSettings().setDatabaseEnabled(true); 
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) { 
    webView.getSettings().setDatabasePath("/data/data/" + webView.getContext().getPackageName() + "/databases/"); 
} 
+0

Người đàn ông Gr8. Làm việc như người ở. +1 –

+1

Không hoạt động trong Samsung A5 – Ricardo

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