Android 4.0.1 casse le stockage local WebView HTML 5?
J'ai un simple html5 page de test qui utilise LocalStorage pour afficher /enregistrer /afficher de nouveau un morceau de données.
Ce code fonctionne parfaitement sous Android 2.3.x mais journaux une exception dans 4.0.1 sur la ligne 18 du code html qui est le frist localStorage.getItem()
appel et à ce point le JS s'arrête.
Exception: Uncaught Error: SECURITY_ERR: DOM Exception 18 at /data/data/my.app.name/app_htmlData:18
J'ai aussi essayé de réglage de la base de données de chemin de getCacheDir()
avec le même résultat.
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);
Le code HTML de la page, le rendu est comme suit:
<!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>
Source disponible ici
source d'informationauteur MrChaz
Vous devez vous connecter pour publier un commentaire.
Via une discussion avec un ingénieur Google, il semble qu'ils ont pris la décision que le fichier://scheme est précaire.
Un travail autour de cela est de faire ce qui suit
Pour les versions d'android à moins de 4.4, le chargement de données dans une webview avec un schéma d'un fichier dans un répertoire:
l'habitude de travailler avec localStorage. Si j'ajoute un nom de fichier, il ne fonctionne pas sur les anciennes versions de systèmes d'exploitation