2013-06-30 2 views
9

У меня есть куча ссылок в моем приложении. Я добавил rel='external' target='_blank' всем им.Открытие ссылок в браузере внешних устройств с помощью Cordova/jQuery-mobile

В эмуляторе Ripple или в обычном настольном браузере это отлично работает. Но на моем Android (JB 4.2.2) он открывает ссылку в том же окне. Нажатие «назад» возвращает меня в приложение, но все ввернуто, и приложение не работает так, как планировалось (события сценария не реагируют), пока физически не перезагрузится.

Как обеспечить, чтобы ссылка открывалась в браузере устройства? Нужно ли использовать плагин Cordova?

(я использую Кордову 2.9.0, JQuery 1.10.1, JQuery Mobile 1.3.1)

ответ

15

Это было действительно непостоянно с 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'); 
      } 
     }); 

Я надеюсь, что поможет вам немного.

+1

Пожалуйста, см. Ответ @ NicoleMcCoy ниже, который является более правильным. ИМО, лучше исправить это тоже. – ishahak

-4

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

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

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

+1

Извините, но это не работает. –

+0

Невозможно создать изображение, это также поможет решить вашу проблему. Возможно, вы разрешили это с чем-то еще. – Jordy

1

Есть несколько таких вопросов, но все они пытаются использовать inappbrowser. Я использовал следующий плагин:

com.byhook.cordova.chromelauncher 

Просто установить его, как всегда, через кли:

cordova plugin add com.byhook.cordova.chromelauncher 

и добавьте следующий код JavaScript:

ChromeLauncher.open(url) 

Это будет:

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

У меня были проблемы с ответом Джейсона Фарнсворта, по-прежнему вызывающим действие по умолчанию после того, как пользователь вернулся в приложение в 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; 
    } 
}); 
0

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

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

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

Смежные вопросы