2015-08-04 2 views
2

Я занимаюсь созданием мобильного приложения для клиента с помощью Buzztouch, поэтому html-страницы не входят в приложение, они загружаются с сервера через JSON.HTML5 localStorage не работает в Android WebView

Клиент хотел бы иметь экран в приложении, где пользователи могут вводить данные в расписание и хранить их на телефоне.

Я пытаюсь сделать это с помощью LocalStorage, и есть настройки все разрешения, и т.д., но я получаю следующее сообщение об ошибке при попытке чтения или записи в LocalStorage на странице:

«SecurityError: Не удалось прочитайте свойство «localStorage;» в «Окно»: доступ запрещен для этого документа ».

Это находится на Asus Memopad работает Android версии 5.

Вот разрешения в файле манифеста:

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.CAMERA" /> 
<uses-permission android:name="android.permission.GET_ACCOUNTS" /> 
<uses-permission android:name="android.permission.READ_CONTACTS" /> 
<uses-permission android:name="android.permission.WRITE_CONTACTS" /> 

Вот настройки WebView:

webView.getSettings().setDatabaseEnabled(true); 
webView.getSettings().setDatabasePath("/data/data/" + webView.getContext().getPackageName() + "/databases/"); 
webView.getSettings().setDomStorageEnabled(true); 

Я ve попробовал тот же самый код на более раннем Android-планшете, работающем под управлением Android версии 2.3, и я не получаю эту ошибку, localStorage отлично работает.

Я также пробовал на iPhone, и он отлично работает.

Я даже попытался скопировать код на стандартную веб-страницу, и он отлично работает в браузере на планшете, но webView все равно не нравится.

Я оглядывался по сети в течение нескольких часов, и до сих пор я не нашел решения для этого.

Любые идеи?

UPDATE:

Вот некоторые из кода JQuery, он имел в виду, чтобы проверить, если LocalStorage доступен, и нагрузка в элементе, если он установлен.

try { 
    if(typeof(Storage) !== "undefined") { 
     try { 
      if(localStorage.getItem("storage") !== null) { 
       storage = JSON.parse(localStorage.getItem("storage")); 
      } 
     } catch(e) { 
      $("#error").html($("#error").html() + " " + e + "<br>"); 
      $("#error").css("display", "block"); 
     } 
    } else { 
     $("#log").html("HTML5 Storage is not working."); 
    } 
} catch(e) { 
    $("#error").html($("#error").html() + " " + e + "<br>"); 
    $("#error").css("display", "block"); 
} 

Это то, что бросает ошибку на нагрузке, так как это в .ready разделе $ (документ).

+0

Почему, черт возьми, вы используете жестко закодированные пути? вы знаете, что у вас может быть несколько учетных записей на Android 4.2+? – Selvin

ответ

0

Мне, наконец, удалось решить эту проблему.

Единственный способ, которым я мог заставить его не работать, независимо от того, что я пробовал, должен был включать в HTML-файл в приложение, а не делать это через панель управления Buzztouch, и нагрузка, что в.

Этот HTML файл загружается правильно и без ошибок localStorage.

0

Эта ошибка на самом деле не связана с отсутствием каких-либо разрешений на стороне Java, это связано с улучшенной моделью веб-безопасности для новых версий WebView. Трудно сказать, что приложение делает неправильно, не видя фактического кода, но я предполагаю, что вы, вероятно, пытаетесь получить доступ к localStorage со страницы другого происхождения. Например. если вы используете loadData для своей начальной страницы, а затем загружаете другие части с сервера, этот код может иметь разное происхождение.

+0

Я добавил в раздел кода jQuery, который я использую, который предназначен для загрузки в элемент localstorage. Плагин Buzztouch, который я использую для загрузки страницы, - это Пользовательский HTML/Текст, [link] (https://www.buzztouch.com/plugins/plugin.php?pid=25345CE1537CB2872B9050B). Насколько я понимаю, он загружается в html, который вы сохраняете в панели управления через JSON, я не уверен, что это вызывает проблему. –

Смежные вопросы