Tôi có một trang thử nghiệm html5 đơn giản sử dụng LocalStorage để hiển thị/lưu/hiển thị lại một đoạn dữ liệu.Android 4.0.1 phá vỡ WebView HTML 5 lưu trữ cục bộ?
Mã này hoạt động hoàn hảo trong Android 2.3.x nhưng nhật ký ngoại lệ trong 4.0.1 trên dòng 18 của html là cú pháp gọi là localStorage.getItem()
và tại thời điểm này JS dừng lại.
Ngoại lệ: Uncaught Error: SECURITY_ERR: DOM Exception 18 at /data/data/my.app.name/app_htmlData:18
Tôi cũng đã thử đặt đường dẫn cơ sở dữ liệu thành getCacheDir()
với cùng một kết quả.
String htmlContent = "HTML content listed below";
File sharedDir = getActivity().getDir("htmlData", Context.MODE_PRIVATE);
WebView browser = (WebView)v.findViewById(R.id.wvBrowser);
browser.setWebChromeClient(new WebChromeClient(){
public void onExceededDatabaseQuota(String url, String databaseIdentifier, long currentQuota, long estimatedSize, long totalUsedQuota, WebStorage.QuotaUpdater quotaUpdater) {
quotaUpdater.updateQuota(estimatedSize * 2);
}
});
browser.setWebViewClient(new WebViewClient(){
@Override
public void onPageFinished(WebView view, String url){
view.loadUrl("javascript:doTest()");
});
browser.getSettings().setDatabaseEnabled(true);
browser.getSettings().setDatabasePath(sharedDir.getPath());
browser.getSettings().setDomStorageEnabled(true);
browser.loadDataWithBaseURL(mSharedDir.getPath(),
htmlContent,
"text/html",
"utf-8",
null);
HTML mà trang được render như sau:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>Simple localStorage test</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script type="text/javascript">
function doTest() {
$('#stuff').append('<p>reading</p>');
var item = read();
$('#stuff').append('<p>writing</p>');
localStorage['bar'] = new Date().toUTCString();
$('#stuff').append('<p> </p><p>reading again</p>');
read();
}
function read() {
var item = localStorage.getItem('bar');
if (item == null || (item == undefined)) {
item = '';
}
$('#stuff').append('<p> item: ' + item + '</p>');
return item;
}
</script>
</head>
<body>
<p>-Simple localStorage test-</p>
<div id="stuff"></div>
</body>
</html>
Nguồn sẵn here
Ngoại lệ được ghi lại là gì? – CommonsWare
Xin lỗi, điều đó sẽ hữu ích - được thêm vào câu hỏi – MrChaz
Thật lạ lùng. Nếu bạn có một dự án mẫu hoàn chỉnh, bạn có thể đóng gói và tải lên một nơi nào đó, tôi muốn xem xét nó. – CommonsWare