Mailto: ссылки, не открывающие приложение для почты на Android в приложении cordova
Это сводит меня с ума. Я работаю над Ionic-приложением (Cordova, Angular и т.д.). У меня есть ссылка с нами, которая содержит mailto: href
href="mailto:[email protected]?subject=my%20App"
Я читал бесчисленные сообщения на SO, которые говорят, что вам нужно удалить
<access origin="*"/>
из config.xml в корне проекта и замените его на:
<access origin="mailto:*" launch-external="true" />
Что я сделал. Когда я запускаю ionic build
, он добавляется в файл config.xml в platforms/android/res/xml
. Но независимо от того, что я делаю, ссылка не открывает почтовое приложение на любом Android-симуляторе (даже если электронная почта настроена в симуляторе).
К сожалению, у меня нет устройства для тестирования - так это всего лишь вещь эмулятора или я что-то не хватает?
Ответы
Ответ 1
Вы должны установить список плагинов Cordova:
cordova plugin add cordova-plugin-whitelist
или если вы хотите сохранить ссылку на свой файл config.xml:
cordova plugin add cordova-plugin-whitelist --save
и что вы должны добавить намерение в свой файл config.xml:
<allow-intent href="mailto:*" />
Вы можете найти более подробную информацию здесь.
Ответ 2
что, если вы замените "true" на "yes"... Я использую это в своем приложении, и он работает.
<access origin="tel:*" launch-external="yes"/>
Ответ 3
Начнём на это сегодня и заметил что-то, что затронуло mailto, но не tel, ссылки:
В дополнение к добавлению намерения в конфигурацию кордовы, как описано с помощью dave answer
<allow-intent href="mailto:*" />
Мне также пришлось разрешать ссылки mailto в заголовке csp моей страницы
<meta http-equiv="Content-Security-Policy" content="default-src 'self' mailto:*">
Не видел никакой документации вокруг этого поведения заголовков CSP.
Ответ 4
Я просто решил это благодаря ответам и статьям выше. Я не уверен, что было или не изменилось с тех пор, как было опубликовано выше, но для ссылок на других; Теперь у меня http://, https://, tel:, & mailto:
работает только с плагином inappbrowser, и никаких ручных изменений в config.xml не требуется. Я сделал все, что упоминалось выше, и он все еще не работал, поэтому я начал играть и обнаружил, что для вызова window.open()
требуется, чтобы второй параметр "_system"
работал правильно (он попытался использовать браузер и "перейти" на http://mailto:xxx...
без флага "_system"
).
Однако, ради любопытства, я удалил плагин whitelist и удалил ручные изменения в файле config.xml, и он все еще работает.
Примечания:
-Я не помню всех вариаций, которые я пробовал, но onclick не смог получить доступ к областям Ionic/ Angular/Cordova, поэтому я придерживался ng-click.
- Я не пытался/не пытался использовать href= "..." с любыми параметрами.
(Если я помню, я буду проверять их и обновлять, чтобы отобразить мои результаты.)
Итак, только с установленным кордовым плагином-inappbrowser и без изменений config.xml, вот мои рабочие/проверенные решения:
ng-click="window.open('http://somesite.com', '_system')"
ng-click="window.open('https://google.com', '_system')"
ng-click="window.open('tel:(123) 345-4567')"
ng-click="window.open('mailto:[email protected]', '_system')"
Протестировано 9/20/2016 Использование:
HTC One M8, android 6, cordova v6.3.1, cordova-plugin-inappbrowser v1.5.0, ionic v2.0.0, jdk1.8.0_101, android SDK 21, 23 и 24 установлены
Ответ 5
Изменение Кордова WhiteListPlugin в config.xml
не работает для меня - <access >,
`. Я пробовал много комбинаций, в том числе выше. Не означает, что они не будут работать обязательно, только для моей настройки это не так. (Для браузера, Android и iOS)
Однако, используя плагин Cordova InAppBrowser, работал:
Как упоминалось выше, используйте плагин inAppBrowser и установите цель в _system.
Это передает проблемы, которые я видел в iOS с помощью unsupported url
, и запускает собственный веб-браузер собственных систем (т.е. не полагается на WhiteListPlugin, чтобы разрешить URL-вызов).
Надеюсь, что это поможет.
Кордова версия 6.3.1.
Ответ 6
Попробуйте следующее:
window.location.href = "mailto:[email protected]?subject=Works on iOS too";