Открытие ссылок в браузере внешнего устройства с помощью Cordova/jQuery-mobile
У меня есть куча ссылок в моем приложении. Я добавил rel='external' target='_blank'
для всех из них.
в эмуляторе пульсация или в обычном настольном браузере это отлично работает. Но на моем Android (JB 4.2.2) он открывает ссылку в том же окне. Нажатие "назад" возвращает меня к приложению, но все ввернуто, и приложение не работает по плану (события сценария не реагируют), пока физически не перезагрузится.
Как я могу гарантировать, что ссылка открывается в браузере устройства? Мне нужно использовать a Плагин Cordova?
(Я использую Cordova 2.9.0, jQuery 1.10.1, jQuery Mobile 1.3.1)
5 ответов
Это было действительно непостоянно с Cordova / PhoneGap в последних нескольких выпусках, я считаю, из-за InAppBrowser работа, которая может быть решением для вас.
то, что работает для нас, чтобы запустить во внешнем браузере:
window.open("http://myurl.com", '_system');
в нашем случае мы хотим найти все внешние ссылки и запустить их в Safari/Chrome (и сохранить внутренние ссылки в нашем угловом маршрутизаторе). Это, наверное, не самое элегантное решение, но мы делаем это прямо сейчас захват входных событий по ссылкам и захват поведения, например:
$(document).on('mousedown','a', function(e) {
e.preventDefault();
var elem = $(this);
var url = elem.attr('href');
if (url.indexOf('http://') !== -1) {
window.open(url, '_system');
}
});
Я надеюсь, что это поможет вам немного.
У меня были проблемы с ответом Джейсона Фарнсворта, все еще запускающим действие по умолчанию после возвращения пользователя в приложение в iOS. Поэтому после небольшой настройки его кода я пришел к следующему, и он вел себя так, как ожидалось.
$(document).on('click', 'a', function (e) {
var elem = $(this);
var url = elem.attr('href');
if (url.indexOf('http://') !== -1) {
e.preventDefault();
window.open(url, '_system');
return false;
}
});
есть несколько таких вопросов, но все они пытаются использовать inappbrowser. Я использовал следующий плагин:
com.byhook.cordova.chromelauncher
просто установите его, как всегда, через CLI:
cordova plugin add com.byhook.cordova.chromelauncher
и добавьте следующий JavaScript код:
ChromeLauncher.open(url)
Это:
- поставить приложение в фоновом режиме
- откройте существующий экземпляр браузера "google chrome для android" (согласно коду, Google Play будет открыт, если Браузер Chrome не найден, но я не тестировал это)
- добавить новую вкладку в браузер Chrome, указывая на нужный URL
Я искал возраст для правильного ответа и сумел исправить это по-другому, кроме уже данных ответов.
прежде всего, старые версии Cordova, похоже, ломаются, когда вы используете некоторые методы на более новых версиях Android. Обновление Cordova до последней версии приведет к некоторым возможным проблемам миграции в вашем текущем проекте, но стоит попробовать обновить. Обновлено до Cordova 5.0 от 2.8, стоило мне около получаса изменить код (всего несколько исправления требуется). Перестроен, развернут и успешно запущен после. Кнопка "назад" заставила мое приложение разбиться на более старых версиях Cordova. Более новая версия заставила его работать как шарм с той же строкой кода. Короче говоря, обновите cordova, измените несколько строк, если потребуется, и восстановите свою красоту.
надеюсь, это поможет вам не бороться дни, как я сделал.
вы можете просто удалить цель атрибут
используйте только атрибут "rel"
Я надеюсь, что это может решить вашу проблему, как я сталкиваются с этой проблемой несколько раз.