phonegap tarayıcıda bağlantıyı aç


114
<a target="_blank" data-rel="external" href="http://www.kidzout.com">www.kidzout.com</a>

hey uzmanlar phonegap 2.9.0 kullanıyorum ve yukarıdaki kodu tarayıcıda açmak için kullanıyorum ama aynı uygulamada açılıyor ...... safari tarayıcısı nasıl açılır?

web sitesini aynı uygulamada açıyor ve sonra uygulamaya geri dönemiyorum, bu yüzden uygulamayı silmem ve tekrar yüklemem gerekiyor .....


_blankHarici tarayıcıya ve _selfWebView'a açmak istiyorsanız , 2015 Cordova 5.1.1 çözümüme bakın: stackoverflow.com/a/32227524/82609
Sebastien Lorber

Yanıtlar:


225

İçerisinde ileri sürüldüğü gibi benzer bir soruya , çağırmak için JavaScript kullanmak window.openile targetargüman seti _systemuyarınca, InAppBrowser belgelerinde :

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

Bu işe yaramalı, ancak daha iyi ve daha esnek bir çözüm tüm bağlantıların clickolaylarını durdurmak window.openve bağlantının özelliklerinden okunan argümanlarla çağrı yapmak olacaktır.

Bunun çalışması için InAppBrowser eklentisini kurmanız gerektiğini unutmayın:

cordova plugin add cordova-plugin-inappbrowser

3
evet, ben de aynı hedefi kullandım = "_ boş" cordova 1.7.0'da ama şimdi 2.9.0 ile çalışıyorum ve bu beni rahatsız ediyor, sizin itirazınız da işe yaramadı ...... :(
ahsan ali

6
evet ben de denedim ve paylaştığın linkleri takip ettim, yardımın için teşekkürler ama sorun hala orada, site hala uygulamada açılıyor ...... :(
ahsan ali

hey ahsan, sorunun ne olduğunu açıklar mısın? Sanırım aynı sorunu yaşıyorum.
whossname

3
Bunun çalışması için InAppBrowser eklentisini kurmanız gerektiğini unutmayın, talimatları şurada bulabilirsiniz: cordova.apache.org/docs/en/3.0.0/…
jackocnr

7
Bende de aynı sorun var .. çözüm çalışmıyor :( normal bir bağlantı olarak açılıyor (android'de)
Daniel

30

Diğer gönderilerde cevaplandığı gibi, farklı platformlar için iki farklı seçeneğiniz var. Yaptığım şey:

document.addEventListener('deviceready', onDeviceReady, false);

function onDeviceReady() {

    // Mock device.platform property if not available
    if (!window.device) {
        window.device = { platform: 'Browser' };
    }

    handleExternalURLs();
}

function handleExternalURLs() {
    // Handle click events for all external URLs
    if (device.platform.toUpperCase() === 'ANDROID') {
        $(document).on('click', 'a[href^="http"]', function (e) {
            var url = $(this).attr('href');
            navigator.app.loadUrl(url, { openExternal: true });
            e.preventDefault();
        });
    }
    else if (device.platform.toUpperCase() === 'IOS') {
        $(document).on('click', 'a[href^="http"]', function (e) {
            var url = $(this).attr('href');
            window.open(url, '_system');
            e.preventDefault();
        });
    }
    else {
        // Leave standard behaviour
    }
}

Gördüğünüz gibi cihaz platformunu kontrol ediyorum ve buna bağlı olarak farklı bir yöntem kullanıyorum. Standart bir tarayıcı olması durumunda, standart davranışı bırakıyorum. Şu andan itibaren çözüm Android, iOS ve tarayıcıda düzgün çalışacak, HTML sayfası ise değiştirilmeyecek, böylece URL'leri standart bağlantı olarak temsil edilebilecek.

<a href="http://stackoverflow.com">

Çözüm, InAppBrowser ve Cihaz eklentileri gerektiriyor


Mükemmel cevap. Başkaları için olmaması durumunda, www / cordova_plugins.js dosyanızın hem cihazı hem de tarayıcı içi yapılandırmaları içerdiğinden emin olun. Eklentileri yüklediğimde, çalışan birincil www klasörüme değil, js & plugins yapılandırmalarını hazırlama klasörüne ekler. Yapılandırmayı ve konumları çözdükten sonra, bu mükemmel çalıştı.
Michael Bordash

1
Bu en iyi cevap! Lütfen InAppBrowser eklentisini şu yolla yüklemediğinizi unutmayın:$ meteor add cordova:org.apache.cordova.inappbrowser@0.5.4
tixastronauta

Biri parçacığa katkıda bulunmak isterse, bunu özüne yükledim. gist.github.com/redolent/e79722b32a48a536b5ba
redolent

28
<a onclick="navigator.app.loadUrl('https://google.com/', { openExternal:true });">Link</a>

Android ve PG 3.0 ile benim için çalışıyor


Hem Android 2.3.7 hem de 4.2.2'de benim için hala başarısız görünüyor.
user569825

2
Cordova 3.3.0 ile Android 4.4.2'de benim için çalışıyor. Ancak iOS 6.1'de çalışmaz.
efsane savaşçı

Benim için çalışıyor cordova 3.3.0, teşekkürler, bu bilgiyi nereden aldın? Belgelerde bulunamadı.
Teoman shipahi

Bu benim için cordova 3.4.1 ve android 4.2 ile çalıştı. Eklentiye ihtiyacım yoktu. İOS7'de test ettikten sonra rapor vereceğim.
pgsandstrom

Bu benim için android üzerinde çalışan tek çözüm, teşekkürler
Niraj Chauhan

21

Android ve iphone'da URL açmanın 2 farklı yolu vardır.

IOS İÇİN aşağıdaki kodu kullanın.

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

ve android işletim sistemi için aşağıdaki kodu kullanın.

navigator.app.loadUrl("http://google.com", {openExternal : true});

Cordova da kullanabilir window.open("http://google.com", '_system'). Sen kullanmamalısınız navigator.app.loadUrlçünkü birlikte çalışma olmaz, market://bu durumda, bu olacak sadece yakın uygulamanıza ve açık aynı pencerede .. her zaman tercih değil: URL'lerin.
Agamemnus

1
Agamemnus, window.open phonegap 3.6 uygulamamda android üzerinde çalışmıyor. İşe yaraması için çözümü bu cevapta kullanmam gerekiyor.
Moulde

10

Sonunda bu gönderi iOS'ta bana yardımcı oluyor: http://www.excellentwebworld.com/phonegap-open-a-link-in-safari-or-external-browser/ .

"CDVwebviewDelegate.m" dosyasını açın ve "shouldStartLoadWithRequest" araması yapın, ardından bu kodu işlevin başına ekleyin:

if([[NSString stringWithFormat:@"%@",request.URL] rangeOfString:@"file"].location== NSNotFound) {
    [[UIApplication sharedApplication] openURL:[request URL]];
    return NO;
}

navigator.app.loadUrl("http://google.com", {openExternal : true});Android için kullanırken sorun yok.

Cordova 3.3.0 üzerinden.


3.0.0'da benim için çalışan tek şey budur. Teşekkür ederim!!
Rocklan

3.0'da InAppBrowser eklentisini eklemeniz gerekir. Ne kadar tuhaf görünse de.
Sean Bannister

MainViewController.m'de bir katman üzerinde bunu değiştirirdim: - (BOOL) webView: (UIWebView *) theWebView shouldStartLoadWithRequest: (NSURLRequest *) navigationType iste: (UIWebViewNavigationType) navigationType {NSURL * url = [istek URL]; eğer ([[url şeması] isEqualToString: @ "file"] || [[url şeması] isEqualToString: @ "gap"]) {return [super webView: theWebView shouldStartLoadWithRequest: request navigationType: navigationType]; } else {[[UIApplication sharedApplication] openURL: url]; HAYIR döndür; }}
Gamadril

10

Bu yanıtların hiçbiri, her platformda harici bağlantıların açılması için yeterince açık değildir. Gereğince inAppBrowser docs :

Yüklemek

cordova plugin add cordova-plugin-inappbrowser

Window.open'ın üzerine yaz (isteğe bağlıdır, ancak basit olması için önerilir)

window.open = cordova.InAppBrowser.open;

Üzerine yazmazsanız window.open, yerel window.openişlevi kullanacaksınız ve platformlar arası aynı sonuçları almayı bekleyemezsiniz.

Bağlantıları varsayılan tarayıcıda açmak için kullanın

window.open(your_href_value, '_system');

İnAppBrowser için hedefin (eklenti adının kullanılmasını önerdiği şeydir) '_blank'yerine olduğunu unutmayın '_system'.


Yukarıdaki adımlar olmadan, varsayılan tarayıcı uygulaması çapraz platformunda açılacak bağlantıları alamadım.

Ekstra kredi

Bağlantılar için bir örnek (canlı) tıklama işleyicisi:

document.addEventListener('click', function (e) {
    if (e.target.tagName === 'A' &&
        e.target.href.match(/^https?:\/\//)) {
        e.preventDefault();
        window.open(e.target.href, '_system');
    }
});

Window.open'ı tam olarak nerede geçersiz kılarsınız? Web sitesinde veya
cordova

Tercihen, index.html sayfanıza yüklediğiniz JavaScript dosyanızın üst kısmı (eğer yardımcı oluyorsa web siteniz)
bozdoz

7

Eğer etrafta jQuery varsa, bağlantıya şu şekilde tıklayabilirsiniz:

$(document).on('click', 'a', function (event) {
    event.preventDefault();
    window.open($(this).attr('href'), '_system');
    return false;
});

Bu şekilde html'deki bağlantıları değiştirmeniz gerekmez, bu da çok zaman kazandırabilir. Bunu bir temsilci kullanarak ayarladım, bu yüzden belge nesnesine bağlı olduğunu görüyorsunuz, ikinci argüman 'a' etiketiyle. Bu şekilde, ne zaman eklendiklerine bakılmaksızın tüm 'a' etiketleri ele alınacaktır.

Elbette InAppBrowser eklentisini yüklemeniz gerekiyor:

cordova plugin add org.apache.cordova.inappbrowser

bu kullanacağım güzel bir fikir ama doğrudan pencereye de dikkat etmelisin. açık aramalar (her şey bir bağlantı üzerinden geçmez)
Sebastien Lorber

3
window.open('http://www.kidzout.com', '_system');

Çalışır, ancak yalnızca inappbrowser eklentisi yüklüyse çalışır. Yüklemek, terminal kullanarak, projenizdeki www klasörüne gidin ve şunu yazın:

phonegap plugin add org.apache.cordova.inappbrowser

veya

cordova plugin add org.apache.cordova.inappbrowser

Ardından, bağlantınız tarayıcıda açılacaktır.


Komut phonegap local <command>KULLANIMDAN KALDIRILDI. Komut için yetki verildi phonegap <command>. Komut phonegap local <command>yakında kaldırılacak.
Ajay Suwalka

Geçmişte bilmiyorum ama günümüzde bu eklentiyi kurmak doğru cordova plugin add cordova-plugin-inappbrowser.
Plinio FM

2

Cordova 5.0 ve üstü ile eklenti InAppBrowser, Cordova eklenti kayıt defterinde yeniden adlandırılmıştır, bu nedenle onu kullanarak yüklemelisiniz.

cordova plugin add cordova-plugin-inappbrowser --save

Sonra kullan

<a href="#" onclick="window.open('http://www.kidzout.com', '_system');">www.kidzout.com</a>


1

İOS odaklı PhoneGap Build (v3.4.0) kullanıyorum ve PhoneGap'in InAppBrowser eklentisini tanıması için bu girişin config.xml dosyamda olması gerekiyordu.

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

Bundan sonra, window.open (url, target) kullanımı burada belgelendiği gibi beklendiği gibi çalışmalıdır .


1
Ben m also using PhoneGap Build (v3.5.x) and added the plugin via the config.xml. But what i get is an InAppBrowser without controls an cannot call the safari browser. Isadece window.open () kullanıyorum. Herhangi bir tavsiye?
Reinos

Doğru ayarlanmışsa, window.open çalışmalıdır. Benim durumumda, window.open başka bir tarayıcı url'si açıyor ve sorunsuz çalışıyor. URL'nin iyi olduğundan emin olun.
contactmatt

Bunu Phonegap Build ile denedim ve hata veriyor: "eklenti desteklenmiyor: org.apache.cordova.inappbrowser"
David Ball

1

Ayrıca, bağlantının tarayıcıda açılmaması sorunuyla da karşılaştım, buradaki adımlarla düzeltmem:

1: Bu cordova eklentisini kurun.

cordova plugin add cordova-plugin-inappbrowser

2: html'deki açık bağlantıyı aşağıdaki gibi ekleyin.

<a href="#" onclick="window.open('https://www.google.com/', '_system', 'location=yes');" >Google</a>

3: Bu, çok fazla sorunla karşılaştığım için en önemli adım: cordova.jsdosyayı indirin ve wwwklasöre yapıştırın . Ardından index.htmldosyada buna bir referans verin .

<script src="cordova.js"></script>

Bu çözüm hem android hem de iPhone ortamı için çalışacaktır.


-2

Bunun gibi :

<a href="#" onclick="window.open('https://www.nbatou.com', '_system'); return false;">https://www.nbatou.com</a>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.