2012-10-12 7 views
11

मैंने mutliple प्लेटफार्मों के लिए एचटीएमएल अनुप्रयोगों को विकसित करना शुरू कर दिया है। मैंने हाल ही में कॉर्डोवा 2.0 (फोनगैप) के बारे में सुना है और जब से मैं जानना चाहता हूं कि पुल कैसे काम करता है। कोड चलने के बहुत बाद, मैंने देखा कि Exec.js कोड जहां कॉल जे एस से है -> मूल निवासी होताफोनगैप (कॉर्डोवा) आंतरिक रूप से कैसे काम करता है, आईओएस विशिष्ट

execXhr = execXhr || new XMLHttpRequest(); 
     // Changeing this to a GET will make the XHR reach the URIProtocol on 4.2. 
     // For some reason it still doesn't work though... 
     execXhr.open('HEAD', "file:///!gap_exec", true); 
     execXhr.setRequestHeader('vc', cordova.iOSVCAddr); 
     if (shouldBundleCommandJson()) { 
      execXhr.setRequestHeader('cmds', nativecomm()); 
     } 
     execXhr.send(null); 
    } else { 
     execIframe = execIframe || createExecIframe(); 
     execIframe.src = "gap://ready"; 

लेकिन यह समझना होगा कि कैसे काम करता है चाहते हैं, अवधारणा यहाँ है क्या, क्या फ़ाइल करता है: ///! gap_exec या gap: // तैयार करें? और कॉल निम्न परतों (देशी कोड परतों)

अग्रिम में एक गुच्छा धन्यवाद कैसे करता है।

उत्तर

12

चाल आसान है:

एक वेबदृश्य है। यह आपके ऐप को प्रदर्शित करता है। वेबव्यू सभी नेविगेशन घटनाओं को संभालेगा।

file:///!gap_exec 

या

gap:// 

वेबव्यू नेविगेशन रद्द कर देंगे:

ब्राउज़र पर जाता है तो। इन तार के पीछे सब कुछ एक पहचानकर्ता के रूप में फिर से प्रयोग किया जाता है, ठोस प्लगइन/प्लगइन-विधि और पैरामीटर प्राप्त करने के लिए:

छद्म यूआरएल उदाहरण:

gap://echoplugin/echothistext?Hello World 

यह phonegap एक echoplugin देखने के लिए कारण होगा और "Hello World" को पाठ (मूल) प्लगइन में भेजने के लिए echothistext विधि पर कॉल करें।

अद्यतन

देशी से वापस जिस तरह से करने के लिए जावास्क्रिप्ट है (या हो सकता है) वेबव्यू में एक javascript: यूआरएल लोड हो रहा है।

कंक्रीट कार्यान्वयन थोड़ा अधिक जटिल है, क्योंकि जावास्क्रिप्ट को देशी कोड में कॉलबैक-आईडी भेजना है। एक ही समय में एक से अधिक मूल कॉल चल रहे हैं। लेकिन वास्तव में यह कोई जादू नहीं है। दाएं जावास्क्रिप्ट-कॉलबैक पर सही JSON प्राप्त करने के लिए बस एक संख्या।

मंच और जावास्क्रिप्ट के बीच संवाद करने के विभिन्न तरीके हैं। एंड्रॉइड के लिए तीन या चार अलग-अलग पुल हैं।

+0

मैंने इसे लंबे समय से बाहर निकाला। लेकिन आपका जवाब सही है। धन्यवाद – 2ndlife

+0

क्या आप अभी भी कॉर्डोवा का पालन कर रहे हैं, तो क्या आप अपनी प्रतिक्रिया अपडेट कर सकते हैं? ऐसा लगता है जैसे exec = "gap: // ready" के साथ iframe इंजेक्ट करता है और यह एकमात्र जेएस है ... तो CDVViewController.m सभी अनुरोधों को 'अंतराल' के साथ 'अंतराल' को रोकता है, तो CDCPommandQueue.m स्ट्रिंगबैवलुएटिंग जावास्क्रिप्टफ्रमस्ट्रिंग का उपयोग करता है जेएस कमांड कतार को पकड़ने के लिए । – premiumFrye

+0

@ क्रिस्टियन कुएटबाक: आपने कहा "एक ही समय में एक से अधिक मूल कॉल चल रहे हैं"। मेरी स्थिति बिल्कुल वही है। मुझे एक साथ एक से अधिक देशी प्लगइन विधि को एक साथ कॉल करने की आवश्यकता है। मैं जावास्क्रिप्ट से प्रत्येक प्लगइन कॉल के लिए मूल प्लगइन (कॉलबैक आईडी का उपयोग कर प्लगइन परिणाम के रूप में) से प्रतिक्रिया उत्तीर्ण करना चाहता हूं। मुझे यकीन नहीं है कि इस संदर्भ में कॉर्डोवा कैसे व्यवहार करता है। मैंने इस उद्देश्य के लिए एक अलग सवाल पूछा है। यदि संभव हो, तो क्या आप कृपया इस http://stackoverflow.com/q/32139534/2035845 पर देख सकते हैं। –

4

मैं इसे और अधिक विस्तार से समझने की कोशिश कर रहा हूं। असल में वहाँ आईओएस ओर मदद कर सकते हैं पर 2 तरीके ...

स्रोतों यह कॉर्डोबा एक "तैयार" WebView का उपयोग कर संदेश भेजता है लगता है से कर रहे हैं: shouldStartLoadWithRequest: ... और फिर दूसरे संदेश के साथ परिणाम उठाता है, लेकिन मुझे यकीन नहीं है।

Cordova Sources iOSExec

वहाँ वहाँ बहुत कुछ सीखना है।

+0

मुझे विश्वास है कि आप सही हैं, और आपके उत्तर को देखते हुए मुझे गलत खरगोश छेद को बहुत अधिक घंटों तक जाने से बचाया। 10,000 फीट परिप्रेक्ष्य के लिए उपरोक्त @ क्रिश्चियन-कुएटबाक को मेरी प्रतिक्रिया देखें – premiumFrye