Открытие ссылок в браузере внешнего устройства с помощью 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)

Это:

  1. поставить приложение в фоновом режиме
  2. откройте существующий экземпляр браузера "google chrome для android" (согласно коду, Google Play будет открыт, если Браузер Chrome не найден, но я не тестировал это)
  3. добавить новую вкладку в браузер Chrome, указывая на нужный URL

Я искал возраст для правильного ответа и сумел исправить это по-другому, кроме уже данных ответов.

прежде всего, старые версии Cordova, похоже, ломаются, когда вы используете некоторые методы на более новых версиях Android. Обновление Cordova до последней версии приведет к некоторым возможным проблемам миграции в вашем текущем проекте, но стоит попробовать обновить. Обновлено до Cordova 5.0 от 2.8, стоило мне около получаса изменить код (всего несколько исправления требуется). Перестроен, развернут и успешно запущен после. Кнопка "назад" заставила мое приложение разбиться на более старых версиях Cordova. Более новая версия заставила его работать как шарм с той же строкой кода. Короче говоря, обновите cordova, измените несколько строк, если потребуется, и восстановите свою красоту.

надеюсь, это поможет вам не бороться дни, как я сделал.


вы можете просто удалить цель атрибут

используйте только атрибут "rel"

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