Подтвердить что ты не робот

Ссылки не открываются во внешнем браузере в JQuery Mobile с помощью PhoneGap

У меня проблема с PhoneGap 2.3.0 с JQuery Mobile 1.2.0.

Любая внешняя ссылка iniOS открывается внутри приложения, а не открывает Safari, которые они открывают внутри приложения, что делает невозможным возвращение пользователя в приложение без его перезагрузки.

Я попробовал как rel= "external" , так и target = "_ blank" , чтобы указать внешнюю ссылку, но ни один из них не был успешным.

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

4b9b3361

Ответ 1

Я добавил rel="external" к моим привязным ссылкам.

Затем добавлен/отменен метод shouldStartLoadWithRequest в классе MainViewController:

- (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];
    }
}

Это работает для меня в jQuery Mobile 1.2 и Phonegap 2.2.0. Он должен работать одинаково в Phonegap 2.3.0, но я не тестировал это.

=============================================== ===================================

UPDATE

В Phonegap 2.7.0 или выше этого не может быть необходимости. Теперь Phonegap может открывать ссылки в любом из компонентов UIWebView, Safari или InAppBrowser. Лично мне нравится компонент InAppBrowser, поскольку он, кажется, лучший пользовательский интерфейс для многих случаев использования. Если вы хотите открывать ссылки в Safari, вы можете сделать это сейчас, используя Javascript:

window.open('http://whitelisted-url.com', '_system');

или это для InAppBrowser:

window.open('http://whitelisted-url.com', '_blank');

Посмотрите здесь дополнительную информацию:

http://wiki.apache.org/cordova/InAppBrowser http://docs.phonegap.com/en/2.7.0/cordova_inappbrowser_inappbrowser.md.html#InAppBrowser

Ответ 2

Если вы не хотите переопределять классы или копать слишком глубоко в коде, как было предложено, попробуйте это. Это работало как прелесть для меня. Я использую Phonegap Build и jQuery Mobile.

* Примечание. Я попробовал несколько других способов добавления атрибутов непосредственно в теги привязки, например. <a href="http://externalsite.com target="_blank" data-rel="external" data-ajax="false"> также пробовал target="_system - но никто не работал, поэтому мне пришлось использовать javascript (только 5 строк).

Это не слишком сложно, но я пройду через него...

  • Вам нужно предотвратить поведение тега привязки по умолчанию. Так почему-то хватайтесь за те теги, о которых вы заботитесь. Я добавил класс под названием "внешний" ко всем привязным тегам, которые я хотел открыть извне. Довольно стандартный материал:

    $(document).on('click', ".external", function (e) {
        e.preventDefault();
    };
    
  • Затем возьмите значение href из якоря, который вы пытаетесь загрузить в сафари. Опять же, здесь нет ничего необычного:

    $(document).on('click', ".external", function (e) {
        e.preventDefault();
    
        var targetURL = $(this).attr("href");
    };
    
  • Это был бит, который занял некоторое рытье - я думаю, что Phonegap изменил свой метод на 2.3 с помощью? В любом случае откройте захваченный href в новом окне (здесь находится "_system"):

    $(document).on('click', ".external", function (e) {
        e.preventDefault();
        var targetURL = $(this).attr("href");
    
        window.open(targetURL, "_system");
    });
    

Что это. Этот последний бит кода - это все. По крайней мере, то, что сработало для меня.

Удачи!

(Чтобы дать кредит, где кредит должен быть, вот что мне больше всего помогло: http://www.midnightryder.com/launching-external-urls-in-phonegap-again-phonegap-2-4-x/)

Ответ 3

То же решение, что и @KyleSimmons, но просто встроенное и короче. а простое исправление. И отлично работает для меня.

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

Ответ 4

Чтобы открыть внешнюю ссылку в jQuery Mobile:

<a href="#" onclick="location.href='http://moorberry.net'; return false;" data-rel="external">Like this</a>