2016-09-14 17 views
10

Pencereyi açarak çağrılarımın içinden inappbrowser kullanarak arama yapıyorum. Temel olarak, özel uygulama özelliklerine sahip mobil tenli bir CMS sitesi yüklemek için phonegap'i bir paketleyici olarak kullanıyorum.Phonegap Build CLI-5.2.0 Web Uygulaması İçinde İndirme ve Kapatma

İşte index.html. Inappbrowser kullanıyorum (konumu no ile ayarlanmış).

Ben

gibi görevlerinden benzer belgeleri ve önerileri kullanarak dosya indirme denedim Harici siteden inappbrowser üzerinden yüklenen - Yapacak arıyorum ne

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" > 
<head> 
    <title>Emerald Test App</title> 
    <meta name="apple-mobile-web-app-capable" content="yes" /> 
    <meta name="viewport" content="width=device-width" /> 
    <script src="phonegap.js"></script> 

    <script type='text/javascript'> 
     var ref = null; 
     function onLoad() { 
     document.addEventListener("deviceready", onDeviceReady, false); 
     } 


    function onDeviceReady() { 

     var url = 'https://my-cms-site.com/content.aspx?page_id=31&org_id=1&app=1'; 
     var target = '_blank'; 
     var options = "location=no" 
     ref = cordova.InAppBrowser.open(url, target, options); 

    } 

</script> 
</head> 


<body onload="onLoad()"> 
</body> 
</html> 

bir sistem tarayıcıda açık olan bağlantıları olan

<script type="text/javascript"> 
     window.open(url, '_system'); 
</script> 

Ve _blank ve 'location = no' vb ekleme, ancak hiçbir zar. Bunlar uzak sitemden yüklenen harici sayfalardır.

Bu bağlantılar tıklandığında, aynı tarayıcıda (inappbrowser veya webview) açılır ve tarayıcıyı ele geçirirler. Yapmak istediğim şey, bunları başka bir sistem tarayıcısında açmaktır (krom, safari, her neyse). Bu benim indirme sorunumla ilgilenir (dosyalar sistem tarayıcısında umarız açılacak ve kullanıcı bunlarla ne yapacağını anlayacaktır).

Bir olay dinleyicisi eklemeye çalıştım ve href değerini döndürmek için executescript. Sonra bu değeri window.open (href, '_ system') olarak kullanın; index.html'den (uzak sayfa yerine). Çünkü endekste, inappbrowser'a referans yapacağım.

ref.addEventListener("loadstop", function() { 
    ref.executeScript(
     { code: "var gbal = null; $('a').on('click', function() { gbal = $(this).attr('href'); }); (function runIt() { return gbal })();" }, 
     function(values) { 
      if (values != null) { 
      //alert(values[ 0 ]); 
      window.open(values[0],'_system'); 
      } 

     } 
     ); 
     }); 
    } 

Değerler [0] daima boştur. Bu kodda doğru bir şey yapmıyorum belirtmek için görünüyor: executescript parçası - veya $ (bu) gerçekten değil bu

Yani, büyük soru - dış sitemdeki bağlantıları nasıl açabilirim sistem tarayıcısı window.open ('whatever.htm', '_XXXXX') uzak sitemde çağrıldığında fark yaratmıyor. Bir olay dinleyicisi kullanarak doğru yolda mıyım?

cevap

2

Burada kendi soruyu yanıtlarken, benzer bir durumla karşılaşan herkesin sağlam bir cevabı olabilir. Bunu diğer yayınlardan, referanslardan ve dokümantasyondan birleştirdim.

Bu nedenle, InAppBrowser uygulamasındaki uzak bir sitede harici bir tarayıcıya bir bağlantı açmak istiyorsunuz?

Uzak sitenizde cordova.js dosyanıza, cordova_plugins.js dosyanıza bir komut dosyası src eklemeniz ve eklentiler klasörünüzü eklemeniz gerekir. Bu dosyalar uzak sitenizde barındırılmalıdır. "Uygulama" olduğunu biliyorsanız, koşullu olarak mayın yüklemeyi seçiyorum. Yüklendiğinde cordova dosyaları bir dizi uyarıyı atar, böylece uygulamayı bilmedikçe bunları yüklemek istemezsiniz.

enter image description here

Nerede bu dosyaları alabilirim? Phonegap Desktop uygulamasını kurdum ve dosyaları yapıdan kullandım, ancak bazı referans hataları vardı. Bunun yerine Phonegap Build'i kullandım ve dosyaları APK'dan çıkardım. Appname.apk dosyasını appname.apk.zip olarak yeniden adlandırdı ve gerekli js dosyalarını sunucuma çıkardım/kopyaladım. * Platform farklılıkları ile ilgili bazı sorunlar var ve cordova.js dosyasının iOS/Android için değiştirilip koşullu olarak yüklenmesi gerekiyor.

Bunlar, inappbrowser'a (ve "app uygulamasını kapat" şartına - navigator) sahip olduğunuz için gereklidir.

Uzaktaki (harici) sitemde (cordova/plugins'i yükledikten sonra) artık uygulamayı navigator.app.exitApp(); inappbrowser yüklenen benim uzaktan (harici) sitenin sayfalarında

, ben artık böyle bir şey yaparak dış sayfalarında açık bağlantılar: Ben biraz loadURL fonksiyonunu değiştirerek jquery kullanmayı planlıyorsanız

<a onclick="loadUrl('http://google.com'); return false;" href="#">Test link, don't click</a> 

<script type="text/javascript"> 
$('.closeapp').click(function() { 
navigator.app.exitApp(); //this only works on Android. iOS doesn't allow for programmatic exit 
}); 
function loadUrl(url){ 
    navigator.app.loadUrl(url, { openExternal:true }); 
    return false; 
} 
</script> 

, tıklayın ve bir sınıf aramak için ele alınacak. gibi bir şey:

$('.downloadable').click(function() { 
var url = $(this).attr('href'); 
navigator.app.loadUrl(url, { openExternal:true }); 
}); 

yukarıda yalnızca Android için çalışır. Vanilla window.open'i ('http://www.whatever.com', '_system') denemek, harici sitemden iOS'ta harici bir tarayıcı açmıyor. Harici sitemin içinden başka bir ref = cordova.inappbrowser.open() kullanmayı mı düşündüm? Bu işe yaramıyor. Herhangi bir fikri olan var mı?

İlgili konular