2012-11-29 14 views
9

के माध्यम से एचटीएमएल प्रस्तुत करें यह स्टैक ओवरफ़्लो पर मेरा पहला प्रश्न है। यह पहली बार नहीं है जब मैं एक लिखना चाहता था, लेकिन आमतौर पर मुझे खोज बार का उपयोग करके समाधान मिल जाता है, इस बार मैंने नहीं किया। जिस समस्या का मैं सामना कर रहा हूं वह थोड़ा जटिल है इसलिए मैं कोशिश करूँगा और possibile के रूप में पूरी तरह से हो जाएगा।एएस 3 फ्लैश - बाहरी इंटरफेस

असल में हम फ्लैश में पहले से मौजूद ईकॉमर्स में चीनी भुगतान जोड़ रहे हैं। पूरी वेबसाइट AS3 में है, जो SWFObject का उपयोग करके एम्बेडेड है, पहले से ही अन्य चीजों के लिए बाहरी इंटरफेस का उपयोग कर रही है।

यह नई चीनी भुगतान विधि थोड़ा पुरानी है, इसलिए उनके पास भुगतान संभालने का एक अजीब तरीका है। एक बार जब हम सभी ऑर्डर विवरणों के साथ अपने सर्वर पर एक पोस्ट भेज चुके हैं, तो वे एक HTML पृष्ठ के साथ प्रतिक्रिया देते हैं। मेरी समस्या इस पृष्ठ को प्रतिपादित कर रही है, क्योंकि मुझे लगता है कि मैं इसे फ्लैश के अंदर प्राप्त करता हूं।

जिस समाधान पर मैं कोशिश कर रहा हूं वह आंशिक रूप से काम करता है, जिसका अर्थ है कि मैं पृष्ठ देख पा रहा हूं, लेकिन चीनी वर्ण जो पृष्ठ में होने वाले हैं, बुरी तरह से प्रस्तुत कर रहे हैं। चीनी पात्रों के बजाय मैं अजीब पात्रों को देख रहा हूं, इसलिए मुझे लगता है कि जब मैं HTML से फ्लैश से जावास्क्रिप्ट को पास करता हूं तो मुझे एन्कोडिंग समस्या होनी चाहिए। यह मैं इसे कैसे कर रहा हूँ है:

AS3:

//extract html page from response 
var newHTML:String = e.currentTarget.data; 
//trim whitespace to avoid javascript error 
newHTML = newHTML.replace(/\n/g, ''); 
newHTML = newHTML.split("\r").join(""); 

if(ExternalInterface.available) 
    ExternalInterface.call("chinesePayment('"+newHTML+"')"); 
else 
    trace("External interface error"); 

जावास्क्रिप्ट:

function chinesePayment(param) { 
    var newWindow = window.open(); 
    //var unescaped = unescape(param); 
    newWindow.document.write(param); 
} 

मैं unescape साथ के बारे में खिलवाड़ की कोशिश की है, बच, URIencoding लेकिन किसी भी सफलता नहीं मिली, तो मैं मैं वास्तव में उम्मीद कर रहा हूं कि आप मेरी मदद कर सकते हैं!

धन्यवाद, डोमेनिको

संपादित करें:

मैं सिर्फ इतना है कि मैं अपने सर्वर से एक सही HTML पेज प्राप्त कर रहा हूँ उल्लेख करना चाहते हैं। मैंने स्थानीय रूप से पृष्ठ को सहेजने की कोशिश की है, सीधे एचटीएमएल कोड को सर्वर प्रतिक्रिया से कॉपी कर रहा है, और पृष्ठ दृश्य सही तरीके से। इसका मतलब है कि पृष्ठ को एएस 3 से जावास्क्रिप्ट में पास करने की प्रक्रिया में कुछ गलत होना चाहिए।

EDIT2 महत्वपूर्ण:

मैंने महसूस किया है कि समस्या पॉपअप एन्कोडिंग में देता है। जब मैं पॉपअप से एचटीएमएल की प्रतिलिपि बनाता हूं, इसे एक संपादक में पेस्ट करें और इसे सेव करें मैं HTML को सही ढंग से देख सकता हूं। ऐसा लगता है कि पॉपअप जीबीके एन्कोडिंग पर विचार नहीं करता है। अब मैं इस समस्या का हल ढूंढ रहा हूं।

+0

यदि आप उस डेटा को फ़ाइल संदर्भ के माध्यम से डंप करते हैं, तो इसे HTML के रूप में खोलें, क्या यह ब्राउज़र में ठीक से काम करता है? – Vesper

+0

मैंने कोशिश नहीं की है, क्योंकि यह भी अंतिम समाधान नहीं हो सकता है। यह देखते हुए कि इस वेबसाइट को बहुत सारे ऑर्डर प्राप्त हुए हैं, मैं प्रत्येक ऑर्डर के लिए स्थिर पेज बनाने से बचना चाहता हूं। किसी भी तरह मैंने फ्लैश में ब्रेकपॉइंट डालने, एचटीएमएल की प्रतिलिपि बनाने और इसे चिपकाने और संपादक में डालने का प्रयास किया। एक बार जब मैंने उस फ़ाइल को सहेज लिया तो यह ठीक से प्रस्तुत कर रहा था, इस प्रकार एचटीएमएल तब तक ठीक है। मैं यह समाधान देखने की कोशिश करूंगा कि यह काम करता है या नहीं, तो आपको बताएं कि यह कैसा चल रहा है। – aberonni

+0

नहीं, मेरा मतलब यह है कि आपको सही HTML पृष्ठ प्राप्त होता है या नहीं, और क्या यह सभी मेटाडाटा ठीक से सेट है, और अन्य सामान। यदि फ़ाइल के माध्यम से स्थानांतरित किया गया है, तो यह ब्राउज़र में सही ढंग से गठित हो जाएगा, तो आपको एक सही HTML प्राप्त होगा और आपको जेएस हैंडलिंग HTML स्ट्रिंग्स को आगे बढ़ाने की आवश्यकता है - मुझे इस बारे में ज्ञान नहीं है कि प्रक्रिया में कुछ खराब हो सकता है या नहीं। यदि नहीं, तो आपको या तो एक गलत/अपूर्ण HTML प्राप्त होता है, या आपके सिस्टम पर फोंट की कमी होती है, या आपके द्वारा देखे जाने वाले व्यवहार के कुछ अन्य गैर-प्रोग्रामिंग कारण होते हैं। – Vesper

उत्तर

2

मुझे अंत में एक समाधान मिला है !!!!

असल में मुझे चीनी वर्णों को फ्लैश में प्रस्तुत करना पड़ा ताकि जब मैं उन्हें जावास्क्रिप्ट में पास कर दूं तो वे पहले से ही एन्कोड किए गए थे। तो सब से पहले मैं बाइनरी URLLoaderDataFormat के प्रकार बदलना पड़ा ताकि मैं एक bytearray प्राप्त किया:

my_loader.dataFormat = URLLoaderDataFormat.BINARY; 

एक बार मैं प्रतिक्रिया मैं कोड इस तरह से संशोधित प्राप्त किया:

 var bytes:ByteArray = e.currentTarget.data; 
     var newHTML:String = bytes.readMultiByte(bytes.length,"gb2312"); 
     //trim whitespace to avoid javascript error 
     newHTML = newHTML.replace(/\n/g, ''); 
     newHTML = newHTML.split("\r").join(""); 

     if(ExternalInterface.available) 
      ExternalInterface.call("chinesePayment('"+newHTML+"')"); 
     else 
      trace("External interface error"); 

के रूप में आप कर सकते हैं देखें, एक विशिष्ट बाइटएरे फ़ंक्शन के लिए धन्यवाद, मैं पसंदीदा वर्णमाला का उपयोग करके प्रतिक्रिया पढ़ सकता हूं, और अब यह काम करता है!

जावास्क्रिप्ट एक जैसा दिखता है, बिना पर्चे या सिमिलर के।इस तरह जावास्क्रिप्ट फ़ंक्शन को चीनी वर्णों के साथ एक स्ट्रिंग प्राप्त हुई, न कि समकक्ष यूटीएफ वर्णों के साथ।

सभी के लिए धन्यवाद, आपने मुझे समाधान प्राप्त करने में मदद की!

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