Кордова с размещенным веб-приложением с использованием камеры

Я пытаюсь создать приложение с помощью cordova, но вместо того, чтобы размещать веб-приложение локально, я размещу его на сервере.

Так что эта часть хорошо работает с белым списком и разрешающей навигацией.

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

Итак, это мое простое веб-приложение, просто чтобы понять, как оно работает.

<!DOCTYPE html>
<head>
    <title>test</title>
    <script src = "scripts/cordova.js"></script>
</head>

<body>
<script>

    (function() {

        // camera will be undefined
        var camera = navigator.camera;

    })();


</script>
</body>
</html>

Но когда я помещаю все это в setTimeout, оно становится доступным.

<!DOCTYPE html>
<head>
    <title>test</title>
    <script src = "scripts/cordova.js"></script>
</head>

<body>

<script>

    (function() {
        setTimeout(function() {

            // I can now use it. 
            var camera = navigator.camera;

        }, 10000);
    })();


</script>

</body>

</html>

А это мой файл index.js, который будет перенаправлять в веб-приложение, размещенное на нашем сервере. Поэтому он ждет готовности устройства перед перенаправлением.

var app = {
    // Application Constructor
    initialize: function() {
        document.addEventListener('deviceready', this.onDeviceReady.bind(this), false);
    },

    // deviceready Event Handler
    //
    // Bind any cordova events here. Common events are:
    // 'pause', 'resume', etc.
    onDeviceReady: function() {
        this.receivedEvent('deviceready');
        window.location.replace("http://10.0.0.36:8080/");
    },

    // Update DOM on a Received Event
    receivedEvent: function(id) {
        var parentElement = document.getElementById(id);
        var listeningElement = parentElement.querySelector('.listening');
        var receivedElement = parentElement.querySelector('.received');

        listeningElement.setAttribute('style', 'display:none;');
        receivedElement.setAttribute('style', 'display:block;');

        console.info('Received Event: ' + id);
    }
};

app.initialize();

Я пытаюсь понять почему?

Спасибо,

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
822
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

document.addEventListener("deviceready", function(){
  var camera = navigator.camera;
})

См. Мой обновленный вопрос, в котором показано событие deviceready.

pdiddy 26.10.2018 21:33

Когда вы перенаправляете страницу, вам нужно другое устройство, готовое, потому что файл cordova.js перезагружается, следовательно, доступ плагинов тоже.

Keenan35i 26.10.2018 23:45

Другие вопросы по теме