Этим утром я столкнулся со странной проблемой с тем, что должно было быть относительно простым кодом. Я работаю над набором демонстраций с использованием Ionic и Cordova, которые демонстрируют конкретный вариант использования камеры. Во время тестирования я заметил, что не вижу изображения, которое выбрал из галереи.
Сначала я подумал, что это проблема Angular (хорошо, они называют это функцией, и я получаю обоснование, но я называю это ошибкой, и я счастлив, что ошибаюсь), где библиотека будет блокировать вас от введения потенциально опасного вещи в DOM. Исправить это довольно просто — просто добавьте регулярное выражение в imgSrcSanitizationWhitelist:
$compileProvider.imgSrcSanitizationWhitelist(/^\s*(https?|ftp|mailto|content|file|assets-library):/);
Однако это не сработало. Я тестировал с iOS, поэтому я быстро переключился на Android и проверил там. Я заметил, что у меня была такая же проблема.
В этот момент я ударил кирпичную стену. Я использовал камеру несколько раз , прежде чем с Кордовой , поэтому я предположил , что это должно был угловым вопросом. Затем я попробовал основную демонстрацию камеры из репозитория Cordova examples — приложения, которое я создал некоторое время назад и которое было настолько простым, насколько это возможно, — и это тоже не получилось!
Во время тестирования, я отладка, конечно, и я заметил эту ошибку в консоли: Not allowed to load local resource
. Это то, что изначально напомнило мне использовать настройку очистки в Angular, но я видел это и в моем неангулярном примере.
Затем я сделал еще один тест. Во время тестирования я использовал функцию прямой перезагрузки Ionic. По какой-то прихоти я остановился и переключился на то, чтобы просто делать cordova emulate ios
… и это сработало. Затем я понял, кто виноват — перезагрузка в прямом эфире.
При использовании прямой перезагрузки вы фактически запускаете ресурсы с компьютера, а не с устройства. Это означает, что URI, возвращаемые плагином камеры, ссылаются на URI на компьютере, который не существует .
Чтобы убедиться, что это проблема, я также протестировал приложение PhoneGap Developer и у меня возникла точно такая же проблема. Это имеет смысл, но определенно немного облом, если вам нужно протестировать что-либо, касающееся файловой системы. В моем конкретном случае использования я мог бы перейти на использование изображений base64, но я собираюсь избегать этого, поскольку это обычно не рекомендуется.
Чтобы было ясно, я не предлагаю избегать этих функций. Ионный поживет Reload является бесконтрольным полезно как ад, и PhoneGap Developer App является номер один способом теста PhoneGap / Кордове быстро (и будет то , что я использую в презентациях в будущем), но вы хотите , чтобы помнить эти вопросы при тестировании. Я открыл ER для Ionic CLI, чтобы предупредить пользователей об этом, и я был бы признателен людям (за или против), если вы являетесь пользователем Ionic.