2009-06-24 7 views
19

मैं डोमेन पर बाहरी इंटरफेस के माध्यम से जावास्क्रिप्ट और फ्लैश के बीच संचार सक्षम करने की कोशिश कर रहा हूं। जब जावास्क्रिप्ट एसडब्ल्यूएफ के समान डोमेन पर स्थित होता है तो जावास्क्रिप्ट बहुत अच्छा काम करता है। लेकिन एक मामले में, एचटीएमएल डोमेन A पर रहता है, जावास्क्रिप्ट और फ्लैश दोनों डोमेन बी पर रहते हैं मैं निम्नलिखित सब कुछ कर लिया:क्रॉस डोमेन बाहरी इंटरफेस "एनपीओब्जेक्ट पर विधि कॉल करने में त्रुटि"

  • एम्बेड टैग allowScriptAccess="always" है (और उद्देश्य यह है कि के रूप में एक है परम)
  • मेरे SWF फ़ाइल के actionscipt है Security.allowDomain("*")
  • मेरे SWF भी कॉल Security.allowInsecureDomain("*")
  • दोनों डोमेन ए और बी डोमेन जो allow-access-from domain="*"
एक /crossdomain.xml फ़ाइल है

SWF पृष्ठ पर जावास्क्रिप्ट फोन करने में सक्षम है, लेकिन जब मैं जावास्क्रिप्ट का उपयोग ExternalInterface द्वारा उजागर कार्यों कॉल करने के लिए, मैं

Error calling method on NPObject! [plugin exception: Error in Actionscript. Use a try/catch block to find error.]

प्राप्त यह ActionScript 2 तो ExternalInterface.marshallExceptions उपलब्ध नहीं है।

+0

क्या आप एक से अधिक एसएफएफ लोड कर रहे हैं? या डोमेन ए पर एक एसएफएफ है (एचटीएमएल के साथ) डोमेन बी पर अपना एसएफएफ लोड कर रहा है? –

+0

एलेक्स - अच्छा बिंदु, मैंने इसका जिक्र नहीं किया। डोमेन बी से जावास्क्रिप्ट डोमेन बी से एक एसडब्ल्यूएफ लोड करता है, और एसडब्ल्यूएफ डोमेन बी से दूसरा एसडब्ल्यूएफ लोड करता है। यह लोडिंग काम करने लगती है लेकिन मुझे यकीन नहीं है क्योंकि मैं एसडब्ल्यूएफ के साथ बातचीत नहीं कर सकता। – Josh

उत्तर

20

आप केवल काम करने के लिए इस के लिए दो चीजों की आवश्यकता चाहिए AS12 में System.security.allowDomain() - यह AS3 या ऊपर लिखा गया जैसा नहीं है।

उपरोक्त संख्या 2 डोमेन डोमेन पर एचटीएमएल पेज को डोमेन बी पर एसएफएफ में चीजों को कॉल करने की अनुमति देता है।

जिस डोमेन पर आपका जेएस होस्ट किया गया है, वह यहां कोई फर्क नहीं पड़ता है, क्योंकि ब्राउज़र इसे डोमेन ए पर एम्बेड करता है, इसलिए स्क्रिप्ट डोमेन ए में निष्पादित की जाती है।

crossdomain.xml मुख्य रूप से केवल दूरस्थ फ़ाइलों को लोड करने के लिए है, जो आप नहीं कर रहे हैं, इसलिए यदि आप चाहें तो इसे हटा सकते हैं। (और संभवतः आप नहीं चाहेंगे अपने मुख्य डोमेन पर बैठे allow="*" के साथ एक crossdomain.xml फ़ाइल करना चाहते हैं, कि बहुत बुरा व्यवहार है)

+1

अजीब चीज। मेरा एसडब्ल्यूएफ और जेएस/एचटीएमएल दोनों एक ही पृष्ठ पर हैं, लेकिन यह अपवाद अभी भी मौजूद है :( – DataGreed

1

चूंकि आप एकाधिक swfs लोड कर रहे हैं, इसलिए आपको लोड किए गए डोमेन बी पर उन SWF में से प्रत्येक में सुरक्षा सेटिंग्स को शामिल करने की आवश्यकता हो सकती है।

आपको उपयुक्त सुरक्षा सेटिंग्स के साथ लोडर संदर्भ की भी आवश्यकता हो सकती है।

1) allowscriptaccess=always अपने swf पेज

2) System.security.allowDomain("yourhtmldomain.com");

नोट यह है कि के लिए बाहर सामान भेजने के लिए अनुमति देगा:

import flash.system.LoaderContext; 
import flash.system.ApplicationDomain; 
import flash.system.Security; 
import flash.system.SecurityDomain; 
import flash.net.URLRequest; 
import flash.net.URLLoader; 

var context:LoaderContext = new LoaderContext(true, ApplicationDomain.currentDomain, (Security.sandboxType == Security.REMOTE) ? SecurityDomain.currentDomain : null); 
var l:Loader = new Loader(); 
l.load(new URLRequest("http://example.com/myswf.swf"), context); 
+0

हाय, मुझे एक ही समस्या है, जब भी मैंने सुरक्षा डोमेन में NULL के अलावा कुछ और दर्ज करने का प्रयास किया, मुझे एक त्रुटि मिली: त्रुटि # 2114: पैरामीटर लोडरकॉन्टेक्स्ट.सेक्योरिटीडोमेन शून्य होना चाहिए। कोई सुझाव? –

0

फ़्लैश प्लेयर संस्करण 10 के साथ AS3 का उपयोग करते हुए मैं ExternalInterface.addCallback() स्थानीय स्तर पर परीक्षण के लिए सही ढंग से काम करने के लिए नहीं मिल सका । अंतत: "सभी" (http://www.adobe.com/livedocs/flash/9.0/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=00001079.html) के मान के साथ पैरामीटर "allowNetworking" पैरामीटर जोड़कर मेरी स्थानीय प्रतिलिपि मिल गई। इस के साथ संघर्ष करने वाले किसी के लिए शुभकामनाएँ!

0

मुझे यह वही समस्या थी (अनुमति डोमेन इत्यादि अच्छी थी), लेकिन मैं खराब पैरामीटर फ्लैश करने के लिए भेजता हूं - सिर्फ AJAX कॉल से जेएसओएन आउटपुट करता है। समस्या चली गई, जब मैंने उस जेसन को "" में रखा, और फिर इसे जावास्क्रिप्ट ऑब्जेक्ट में जोड़ें (jQuery.parseJSON के माध्यम से)।

http सर्वर गंतव्य के लिए फ़ाइल में लिखने का swfObject (फ्लैश) अनुमति नहीं नहीं डोमेन पहुँच पार

समाधान है:

1
मेरे लिए

कुछ कारण (मैं uploadify उपयोग कर रहा हूँ) था: html में वस्तु टैग होना चाहिए allowScriptAccess = "हमेशा" यह सेट परम द्वारा की तरह किया जा सकता है

$('#file_upload').uploadifySettings('scriptAccess', 'always') 
than flash object must have: 
import flash.system.Security; 
Security.allowDomain('remotedomain.com'); 

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

<?xml version="1.0"?> 
<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd"> 
0

मेरे मामले में, यह था, क्योंकि मैं अपलोड करने वाले div युक्त डोम तत्व को संशोधित किया गया था।

मैंने अपलोडर युक्त div को छिपाने के लिए jquery hide() फ़ंक्शन का उपयोग किया, और जब मुझे एहसास हुआ कि उपर्युक्त त्रुटि हुई है, तो मैंने एक अलग दृष्टिकोण की कोशिश की जहां मैंने div की "float" विशेषता सेट की। दोनों मामलों में, यह अपलोडर तोड़ दिया।

FWIW, ऐसा प्रतीत होता है कि अपलोडर युक्त div की चौड़ाई/ऊंचाई को 0 पर त्रुटि नहीं होती है।

+1

n.b., फ्लैश को तब दिखाई देता है जब यह दिखाई दे रहा है, इसलिए डीओएम के माध्यम से एक मूवी अदृश्य बनाने से फ्लैश निष्पादन तुरंत बंद हो सकता है। –

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