2013-03-01 4 views
5

Я использую Local Storage для передачи значений между страницами, с тем чтобы создать свиток эффект (пользователь нажимает на ссылку и прокручивается в определенную часть страницы на основе ID)PhoneGap - Локальное хранение данных не работает - Android

Ранее я использовал файлы cookie, но, похоже, не работал на Android, я читал, что локальное хранилище было поддержано, поэтому переключилось на это. Он отлично работает в браузере, но как только он упакован как родное приложение, я теряю всю функциональность? API утверждает, что он должен поддерживаться, какие-либо идеи?

Вот мой код:

Базовый URL:

var storage = window.localStorage; 
$("a.scroll_link").click(function(event) { 
    event.preventDefault(); 
    var value = $(this).attr("id"); 

     storage.setItem("key",value); 

    console.log(value); 

    window.location=$(this).attr("href"); 
}); 

Получение URL:

$(function() { 

var value = window.localStorage.getItem("key"); 

if (value != "" && value != "undefined" && value != null) { 
    var storage = window.localStorage; 
    storage.setItem("key",value); 
    var scroll_type = ""; 

    if ($.browser.webkit) { 
     scroll_type = "body"; 
    } else { 
     scroll_type = "html"; 
    } 

    $(scroll_type) 
     .stop() 
     .animate({ 
     //get top-position of target-element and set it as scroll target 
     scrollTop: ($("#" + value).offset().top - 25) 
     //scrolldelay: 1.5 seconds 
    }, { 
     duration: 1500, 
     complete: function() { 
      storage.removeItem("key"); 
     }, 
    }); 
    } 
}); 

код отлично работает в браузере просто не изначально, какие идеи?

Спасибо,

ответ

2

Использование document.addEventListener ("deviceready", onDeviceReady, ложь) вместо $ (функция() {...}

http://docs.phonegap.com/en/2.5.0/cordova_events_events.md.html#deviceready

+0

Понял работает в настоящее время, спасибо, я удалил приложение с устройства, а затем повторно запустить код и теперь все работает, я однако сейчас возникли проблемы с использованием LocalStorage вместе с iScroll, я, кажется, может иметь один или другие и не оба .. какие-нибудь идеи? – woolm110

1

1.Glad знать, что вы решите свою первую проблему. Как говорит gmh04, я думаю, что вы должны заменить событие init на «deviceready», которое запускается при запуске приложения.

2. Вы имеете в виду window.localStorage.getItem («ключ») return null в получении URL? Я не сталкиваюсь с проблемой, как то, что вы описываете. Однако вы можете попытаться переместить свой код при получении URL-адреса на ту же страницу базового URL-адреса. Я пробовал на время и очень уверен, что localStorage будет работать на одной странице.

+0

Кажется, что getItem работает нормально с передаваемым значением, то, что он, кажется, не делает, - это анимация и прокрутка к местоположению на странице, которое соответствует идентификатору значения. – woolm110

1

Я хотел бы добавить, что есть ошибка в версии cordova.js, которые делают LocalStorage не работают на Android 2.6.0:

https://issues.apache.org/jira/browse/CB-3063

На версии 2.5.0 она работает отлично , и это уже исправление на 2.7.0 rc.

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