2016-09-14 7 views
10

मैं अपने ऐप के अंदर से ऐप्पब्रोसर का उपयोग करके विंडो खोलने के लिए कुश्ती कर रहा हूं। असल में, मैं विशेष ऐप सुविधाओं के साथ मोबाइल स्किन किए गए सीएमएस साइट को लोड करने के लिए एक रैपर के रूप में फोनगैप का उपयोग कर रहा हूं।फोनगैप बिल्ड सीएलआई-5.2.0 वेब ऐप के भीतर से डाउनलोड और बंद करें

यहां index.html है। मैं inappbrowser का उपयोग कर रहा हूँ (स्थान के साथ सेट के साथ)। मेरा बाहरी साइट से inappbrowser के माध्यम से भरी हुई

मैं

की तरह पद से समान दस्तावेज और सुझावों का उपयोग फ़ाइलों को डाउनलोड की कोशिश की है -

<!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> 

मैं क्या करने के लिए देख रहा हूँ, एक प्रणाली ब्राउज़र में खुला लिंक है

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

और _blank, और 'स्थान = नहीं' आदि जोड़ना, लेकिन कोई पासा नहीं। ये बाहरी पृष्ठ हैं, जो मेरी दूरस्थ साइट से लोड हैं।

जब ये लिंक क्लिक किए जाते हैं, तो वे उसी ब्राउज़र (इनप्ब्रोसर या वेबव्यू) में खुलते हैं और ब्राउज़र को लेते हैं। मैं जो करना चाहता हूं वह इसे किसी अन्य सिस्टम ब्राउज़र (क्रोम, सफारी, जो कुछ भी) में खोलता है। यह मेरी डाउनलोड समस्या का ख्याल रखेगा (क्योंकि फाइलें सिस्टम ब्राउज़र में उम्मीदपूर्वक खुलती हैं और उपयोगकर्ता यह पता लगा सकता है कि उनके साथ क्या करना है)।

मैंने href के मूल्य को वापस करने के लिए एक ईवेंट श्रोता और निष्पादन सूची जोड़ने की कोशिश की है। फिर उस मान का उपयोग window.open (href, '_ system') पर करें; index.html से (दूरस्थ पृष्ठ के बजाय)। इंडेक्स पर, मेरे पास अभी भी इनप्ब्रोसर का संदर्भ होगा।

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'); 
      } 

     } 
     ); 
     }); 
    } 

मान [0] हमेशा शून्य है। या $ (this) वास्तव में इस

तो, बड़ा सवाल नहीं है - - कैसे मैं एक में मेरी बाहरी साइट में लिंक खोल सकते हैं executescript के भाग: जो इंगित करने के लिए मैं सही ढंग से कोड में कुछ नहीं कर रहा हूँ लगता है सिस्टम ब्राउज़र window.open ('whatever.htm', '_XXXXX') मेरी रिमोट साइट पर कॉल करते समय कोई फर्क नहीं पड़ता। क्या मैं एक ईवेंट श्रोता का उपयोग करके सही रास्ते पर हूं?

उत्तर

2

यहां अपने स्वयं के प्रश्न का उत्तर दें ताकि किसी भी स्थिति का सामना करने वाले किसी को भी ठोस जवाब मिल सके। मैंने इसे अन्य पोस्ट, संदर्भ और दस्तावेज़ीकरण से एक साथ पा लिया है।

तो आप InAppBrowser में एक दूरस्थ लोड साइट में बाहरी ब्राउज़र के लिए एक लिंक खोलना चाहते हैं?

अपनी दूरस्थ साइट पर, आपको अपनी cordova.js फ़ाइल, अपनी cordova_plugins.js फ़ाइल में एक स्क्रिप्ट src शामिल करना होगा, और अपने प्लगइन फ़ोल्डर को शामिल करना होगा। इन फ़ाइलों को आपकी दूरस्थ साइट पर होस्ट किया जाना चाहिए। यदि मैं जानता हूं कि यह "ऐप" है तो मैं सशर्त रूप से लोड करना चुन रहा हूं। लोड होने पर कॉर्डोवा फाइल अलर्ट की एक श्रृंखला फेंक देगी, इसलिए आप इन्हें तब तक लोड नहीं करना चाहेंगे जब तक आपको पता न हो कि यह ऐप है।

enter image description here

आप कहाँ इन फ़ाइलों को मिलता है? मैंने फोनगैप डेस्कटॉप स्थापित किया और बिल्ड से फ़ाइलों का उपयोग किया, लेकिन कुछ संदर्भ त्रुटियां थीं। मैंने इसके बजाय फोनगैप बिल्ड का उपयोग किया, और एपीके से फ़ाइलों को निकाला। Appname.apk को appname.apk.zip में नामित किया गया है और मेरे सर्वर पर आवश्यक जेएस फ़ाइलों को निकाला/कॉपी किया गया है। * प्लेटफ़ॉर्म मतभेदों के साथ कुछ समस्याएं हैं, और cordova.js फ़ाइल को बदलने और आईओएस/एंड्रॉइड के लिए सशर्त रूप से लोड करने की आवश्यकता होगी।

ये आवश्यक हैं ताकि आप इनप्ब्रोसर (और मेरे "बंद करें" आवश्यकता के मामले में हैं - नेविगेटर)।

मेरी रिमोट (बाहरी) साइट पर (मैंने कॉर्डोवा/प्लगइन्स लोड करने के बाद) अब मैं navigator.app.exitApp() पर एक साधारण कॉल के साथ ऐप बंद कर सकता हूं;

मेरे दूरस्थ (बाह्य) साइट के पृष्ठों inappbrowser में लोड में, मैं यह कर सकते हैं अब कुछ इस तरह करने से बाहरी पृष्ठों में खुला लिंक:

<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> 

मैं कुछ हद तक loadURL समारोह को संशोधित करने jQuery के प्रयोग पर योजना है, क्लिक पर संभाला जा सकता है और कक्षा की तलाश में है। की तरह कुछ:

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

ऊपर केवल Android के लिए काम करता है। एक वेनिला विंडो.ऑपेन ('http://www.whatever.com', '_system') का प्रयास करना मेरी बाहरी साइट से आईओएस में बाहरी ब्राउज़र नहीं खोलता है। मैंने अपनी बाहरी साइट के अंदर से एक और ref = cordova.inappbrowser.open() का उपयोग करने के बारे में सोचा? यह काम नहीं करता है। क्या किसी के भी पास कोई सुझाव है?

संबंधित मुद्दे