Запустите мобильное сафари из полноэкранного веб-приложения на iPhone

Я искал в Google несколько вариантов этого вопроса и могу найти ответы только в контексте использования PhoneGap или jQuery Mobile. Однако я не использую ни ... просто старые добрые HTML и JavaScript.

Я пытаюсь запустить мобильное сафари из полноэкранного веб-приложения с помощью window.open () ... не встроенного якоря. Независимо от того, что я делаю, URL-адрес открывается в веб-приложении, а не в Safari. У кого-нибудь есть предложения?

Спасибо.


person Vince    schedule 24.03.2011    source источник


Ответы (6)


Мне потребовалось время, но я смог собрать это решение воедино. В режиме автономного веб-приложения iOS он создает элемент ссылки с помощью jQuery, добавляет его в тело, имитирует щелчок по нему, а затем удаляет ссылку. Вы можете сделать то же самое и без jQuery, просто потребуется больше кода, используя наивные методы DOM.

if (window.navigator.standalone) {
  var $a = $('<a href="' + url + '" target="_blank"/>');
  $("body").append($a);

  var a = $a.get(0);

  var mouseEvent = a.ownerDocument.createEvent('MouseEvents');
  mouseEvent.initMouseEvent('click');
  a.dispatchEvent(mouseEvent);

  $a.remove();
}
else {
  window.open(url, '_blank');
}
person Steve    schedule 20.06.2012

Что касается iOS 4.3, единственный известный мне способ - это преобразовать <div> в <a target="_blank"> и позволить браузеру по умолчанию обработать это. Он запускает новую страницу во внешнем Safari.

person Thomas Yip    schedule 02.05.2011
comment
Это не работает для меня ... Можете ли вы мне образец htmlString, который я могу загрузить только в своем веб-представлении, и он откроет сафари при нажатии - person user1010819; 17.12.2013
comment
Также проверяю на симуляторе, надеюсь, проблем не возникнет. - person user1010819; 17.12.2013

В PhoneGap все URL-адреса по умолчанию загружаются в WebView. Установка целей или увлечение JS не нарушит ваши внешние ссылки из этого WebView. Чтобы загрузить внешние URL-адреса в Safari, а не в само приложение PhoneGap, вам необходимо изменить способ обработки URL-адресов в делегате приложения.

Откройте код приложения PhoneGap и найдите [имя проекта] AppDelegate.m ... обычно находится в папке [имя проекта] / Классы.

Измените shouldStartLoadWithRequest как хотите. Вот пример реализации, которая будет оценивать запросы и обрабатывать схемы HTTP или HTTPS для загрузки в Safari (заимствовано из http://solutions.michaelbrooks.ca/2011/02/15/open-external-links-in-safariapp/):

- (BOOL)webView:(UIWebView *)theWebView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
    NSURL *url = [request URL];

    // Intercept the external http requests and forward to Safari.app
    // Otherwise forward to the PhoneGap WebView
    if ([[url scheme] isEqualToString:@"http"] || [[url scheme] isEqualToString:@"https"]) {
        [[UIApplication sharedApplication] openURL:url];
        return NO;
    }
    else {
        return [ super webView:theWebView shouldStartLoadWithRequest:request navigationType:navigationType ];
    }
}
person Ireney Berezniak    schedule 01.08.2011
comment
+1. Сработало отлично. Также для тех, кто безуспешно искал AppDelegate.m, обратите внимание, что в более поздних версиях PhoneGap / Apache Cordova, включая 1.8.0, сгенерированное переопределение метода webView:shouldStartLoadWithRequest:navigationType: было закомментировано и перемещено в конец MainViewController.m. - person Daniel Trebbien; 16.06.2012

Вы пробовали использовать window.openNative()?

person Stack Guru    schedule 24.03.2011
comment
Это интересно, когда вы пробуете различные варианты схемы URL-адресов. Почтовые ссылки запускают почтовое приложение, ссылки карты запускают приложение карты и т. Д. Но простой старый URL-адрес www не запускает Safari. - person Vince; 25.03.2011

Вы не можете использовать обычный тег A HREF? обычно это открывает Safari из веб-приложения.

person MacCrack    schedule 07.04.2011
comment
Если вы можете использовать тег ‹a› с target = _blank, все будет в порядке. Но если вы находитесь в ситуации, когда вы не можете использовать тег A, вам необходимо использовать это решение. - person Marco Marsala; 18.04.2014
comment
Есть много ситуаций, в которых вы не можете использовать тег ‹a›. Например: - программное открытие ссылки - мобильные приложения HTML5 (фреймворки, такие как Sencha Touch 2) - person Marco Marsala; 18.04.2014

Если вы не можете создать стандартную HTML-ссылку, но вы должны открыть Safari программно (только с кодом Javascript), вот код:

var a = document.createElement("a");
a.setAttribute('href', facebook);
a.setAttribute('target', '_blank');
a.click();
person Marco Marsala    schedule 17.04.2014