PhoneGap: открытие внешнего URL-адреса в Safari

Я только что обновился до PhoneGap 1.6.1, и я больше не могу открывать внешний URL в Safari.

До этой версии я исправил AppDelegate.m следующим образом:

- (BOOL) webView:(UIWebView*)theWebView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType
{
    NSURL *url = [request URL];
    if ([[url scheme] isEqualToString:@"http"]) {
        [[UIApplication sharedApplication] openURL:url];
        return NO;
    } else {
        return [self.viewController webView:theWebView shouldStartLoadWithRequest:request navigationType:navigationType];
    }
}

Я заметил, что аналогичный вопрос был задан раньше: Как открыть внешнюю ссылку в Safari, а не в UIWebView приложения?

Но мне кажется, что этот ответ больше не работает в версии 1.6.1.

Я также попытался установить OpenAllWhitelistURLsInWebView в Cordova.plist, но ни одна настройка не дает мне Safari.

Спасибо заранее.

Ответ 1

Была такая же проблема после обновления до Кордовы 1.6.1.

Попробуйте добавить target="_blank" к вашим ссылкам.

Это помогло мне.

Ответ 2

Лучший способ открыть ссылки в новом URL-адресе - с помощью window.open. Просто установите цель как "_систему":

window.open("http://stackoverflow.com", "_system");

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

С PhoneGap 2.3+ мне не удалось открыть URL-адреса в Mobile Safari. Использование _blank не помогло, и я попробовал window.open(url, '_blank'), но теперь он открывает URL-адрес с помощью плагина InAppBrowser (который в значительной степени засасывает). Я подумал, что интересно, что этот плагин использовал плагин, поэтому я решил написать плагин для открытия URL-адресов, используя стандартный метод открытия URL-адресов в приложениях iOS. Вы можете увидеть/захватить код этот смысл здесь: https://gist.github.com/typeoneerror/5097118.

В моем примере я подключил ссылки, которые имеют класс "_blank" с jQuery, и открыл эти URL-адреса с помощью вызова плагина:

// execute the plugin called OpenUrl, signature:
// exec(successCallback, errorCallback, pluginName, pluginMethod, params)
cordova.exec(success, error, "OpenUrl", "openUrl", [url]);

Ответ 3

Я использовал это в MainViewController.m

- (BOOL)webView:(UIWebView *)theWebView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
    NSURL *url = [request URL];
    NSString *str = url.absoluteString;
    NSRange range = [str rangeOfString:@"http://"];
    //HACK to make url open in safari
    if (range.location != NSNotFound) {
        [[UIApplication sharedApplication] openURL:url];
        return NO;
    }
    else {
        return [ super webView:theWebView shouldStartLoadWithRequest:request navigationType:navigationType ];
    }
}

Ответ 4

В более ранней версии кордовы вы можете загрузить URL-адрес в браузере, добавив в свои ссылки target = "_ blank". Но теперь вы можете использовать функцию браузера inApp.

var ref = window.open(encodeURI('your url'), '_system', 'location=no');

Это открывает URL-адрес в браузере. Протестировано в Android и iPhone с cordova2.7.0

Ответ 5

Мне удалось заставить его работать с этой настройкой:

1 Добавьте следующую строку в config.xml - PhoneGap версии 3.1 и выше:

<gap:plugin name="org.apache.cordova.inappbrowser" />

2 Впоследствии вы можете сделать следующее:

<a onclick="window.open("http://www.yoururl.com/", "_system");">Link</a>

Ответ 6

Попытка упростить решение, это то, с чем я столкнулся, используя PhoneGap/Cordova 2.5.0 и jQuery 1.9.1

  • OpenAllWhitelistURLsInWebView не имеет значения. Установка его в true, false или его отсутствие не влияет на результат.
  • У URL-адреса есть цель _system, например: <a target="_system" href="http://rads.stackoverflow.com/amzn/click/B009CZICQ8">
  • Затем я вызываю:

    $("a[target='_system']").click(function(event) {
    
        event.preventDefault();
        window.open($(this).attr("href"), "_system");
    });
    

Ответ 7

Сделайте это:

<a href="http://www.google.com/" onclick="window.open(this.href,'_system'); return false;">Google</a>

Ответ 8

Использование Phonegap/Cordova 1.7 Мне удалось открыть URL-адреса во внешнем браузере на JavaScript, просто сделав следующее:

window.location.href = "http://www.google.com";

У меня также есть OpenAllWhitelistURLsInWebView, установленный в NO в Cordova.plist

Ответ 9

Это 100% гарантированное решение, если вы используете Phonegap (тестируется в iOS 6).

Чтобы открыть внешний URL-адрес в Safari, выполните следующие действия:

  • Добавьте свою ссылку в External Host (белый список). например: http://google.com/
  • В Cordova.plist или Phonegap.plist измените OpenAllWhitelistURLsInWebView с Yes на No.
  • В своем приложении добавьте target="_blank" к своей ссылке. Пример:

    <a href="http://google.com" target="_blank">Google.com</a>
    

Спасибо.

Ответ 10

Я думаю, что этот метод использовался в /Classes/ [yourAppName]AppDelegate.m, а теперь он находится в /Classes/MainViewController.m. Просто переместил его туда, чтобы увидеть, работает ли он.

Ответ 11

чтобы открыть внешний URL в Safari Выполните следующие шаги.

1). Добавьте свою ссылку в External Host (белый список). с полным URL-адресом если вы хотите использовать URL-адрес Google, добавьте например: http://google.com/

2). В Cordova.plist или Phonegap.plist измените

OpenAllWhitelistURLsInWebView от Yes to No

для Android True для false.

3). напишите этот код для открытия URL

window.location.href = "http://www.google.com";

Ответ 12

Решенный сегодня с использованием этих настроек:

Затем выполните следующие действия:

  • Добавить плагин In App Browser, как указано выше
  • в вашем .html файле настройте эту строку:

<a href='http://www.arsdigitalia.it' target='_blank'>Go to my nice website</a>