2012-05-18 4 views
1

Я вижу странное поведение от PhoneGap. OnDeviceReady запустится, но когда я перейду к использованию переменной «device», она все еще не определена. Я нашел некоторый код, который говорил с этим и сказал, использование SetTimeout подождать одну секунду (опять же, после того, как он говорит, его готовности) на самом деле использовать переменную (ниже):PhoneGap Устройство Горит, когда устройство не готово

setTimeout(function() { 
    MobileDevice = new MobiDevice(device); 
}, 1000); 

Это, казалось, работали на начальном этапе, но теперь это похоже, что время неопределенное. Я недавно был на тайм-аут до 5000. Это наш текущий код:

setTimeout(function() { 
    console.log("starting setup"); 
    try { 
      MobileDevice = new MobiDevice(device); 

     console.log("created MobiDevice from a real device"); 
    } 
    catch (error) { 
     console.log("no device reference - mocking device"); 
     var d = { 
      platform: "Android", 
      version: 5 
     }; 

     MobileDevice = new MobiDevice(d); 
    } 

    console.log("device setup complete"); 
}, 5000); 

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

Заранее благодарен

+2

Какая платформа и версия PhoneGap звучит как ошибка для меня. –

ответ

0

Итак, ответ здесь в два раза. Один, PhoneGap - это то, что есть, вам нужно дождаться инициализации переменной устройства даже после того, как PhoneGap считает, что устройство готово. Я использовал setInterval и ждал, пока не смогу использовать «устройство», прежде чем передать его в мою обертку.

Другая часть этого была в Интернете. Во время тестирования мы хотели быть в состоянии издеваться над устройством и отказываться от инициализации устройства, потому что это не произойдет.

if (navigator.platform.match(/(mac|win)/i)) { 
     console.log("on a browser, mocking the device"); 
     // we are on the browser 
     // you can manually set properties here to test for different devices 
     var d = { 
      platform: "Android", 
      version: 5 
     }; 

     MobileDevice = new MobiDevice(d); 
    } 
    else { 

Прямо сейчас, мы заботимся только о iPhone и Android, таким образом, если мы только navigator.platform, мы можем получить то, что платформа браузер работает на. Это будет отличаться от Windows, iPhone, Android и Mac. Мы достаточно отличаемся друг от друга. Если мы когда-нибудь решим поддержать WP, тогда вам нужно изменить это, скорее всего,

1

Я предлагаю вам использовать опрос.

setTimeout(function() { 
    if(device !== undefined) 
     MobileDevice = new MobiDevice(device); 
    else 
     setTimeout(arguments.callee, 1000); 
}, 1000); 

Если вы хотите, вы можете закалить с лимитом времени ожидания (здесь, 1000мс) таким образом, что она уменьшается после каждого вызова ... вы получите точку.

+0

Да, мы пытаемся сделать это с помощью setInterval, пока не получим его. Вопрос в том, когда мы сдаемся и предположим, что мы находимся в браузере. Проверка объекта JS навигатора – xximjasonxx

+0

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

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