gpt4 book ai didi

Android 4.0.1 打破了 WebView HTML 5 本地存储?

转载 作者:IT老高 更新时间:2023-10-28 23:33:59 24 4
gpt4 key购买 nike

我有一个简单的 html5 测试页面,它使用 LocalStorage 来显示/保存/重新显示一段数据。

此代码在 Android 2.3.x 中完美运行,但 记录 4.0.1 中 html 的第 18 行出现异常,这是第一个 localStorage.getItem() 调用此时 JS 停止。

异常: Uncaught Error :SECURITY_ERR:DOM Exception 18 at/data/data/my.app.name/app_htmlData:18我也尝试将数据库路径设置为 getCacheDir() ,结果相同。

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如下:

<!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>&nbsp;</p><p>reading again</p>');
read();
}
function read() {
var item = localStorage.getItem('bar');
if (item == null || (item == undefined)) {
item = '';
}
$('#stuff').append('<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;item: ' + item + '</p>');

return item;
}
</script>
</head>
<body>
<p>-Simple localStorage test-</p>
<div id="stuff"></div>
</body>
</html>

来源可用here

最佳答案

通过与 Google 工程师的讨论,他们似乎已决定 file://方案不安全。

解决此问题的方法是执行以下操作

browser.loadDataWithBaseURL("http://www.example.com", 
htmlContent,
"text/html",
"utf-8",
null);

关于Android 4.0.1 打破了 WebView HTML 5 本地存储?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8390985/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com