كيف يمكنني استدعاء Flex SWF من مجال بعيد باستخدام Flash (AS3)؟

StackOverflow https://stackoverflow.com/questions/14350

سؤال

لدي فليكس فرنك سويسري مستضاف في http://www.a.com/a.swf.لدي رمز فلاش على مجال آخر يحاول تحميل SWF:

_loader = new Loader();
var req:URLRequest = new URLRequest("http://services.nuconomy.com/n.swf");
_loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onLoaderFinish);
_loader.load(req);

في حدث onLoaderFinish أحاول تحميل الفئات من ملف SWF البعيد وإنشائها:

_loader.contentLoaderInfo.applicationDomain.getDefinition("someClassName") as Class

عند تشغيل هذا الرمز أحصل على الاستثناء التالي

SecurityError: Error #2119: Security sandbox violation: caller http://localhost.service:1234/flashTest/Main.swf cannot access LoaderInfo.applicationDomain owned by http://www.b.com/b.swf.
    at flash.display::LoaderInfo/get applicationDomain()
    at NuconomyLoader/onLoaderFinish()

هل هناك أي طريقة لتشغيل هذا الرمز؟

هل كانت مفيدة؟

المحلول

كل هذا موصوف في أدوبي فليكس 3 برمجة أكشن سكريبت 3 PDF في الصفحة 550 (الفصل 27:أمان Flash Player / البرمجة النصية المتقاطعة):

إذا تم عرض ملفين SWF مكتوبين باستخدام ActionScript 3.0 من نطاقات مختلفة، على سبيل المثال، http://siteA.com/swfA.swf و http://siteB.com/swfB.swf- إذن، بشكل افتراضي، لا يسمح Flash Player لـ swfA.swf بكتابة swfB.swf، ولا swfB.swf ببرمجة swfA.swf.يمنح ملف SWF الإذن لملفات SWF من المجالات الأخرى عن طريق استدعاء Security.allowDomain().من خلال استدعاء Security.allowDomain("siteA.com")، يمنح swfB.swf ملفات SWF من siteA.com الإذن ببرمجتها.

ويستمر الأمر بمزيد من التفاصيل، مع المخططات وكل شيء.

نصائح أخرى

ستحتاج إلى ملف سياسة crossdomain.xml على الخادم الذي يحتوي على الملف الذي تقوم بتحميله، ويجب أن يبدو كما يلي:

<?xml version="1.0"?>
<!-- http://www.foo.com/crossdomain.xml -->
<cross-domain-policy>
  <allow-access-from domain="www.friendOfFoo.com" />
  <allow-access-from domain="*.foo.com" />
  <allow-access-from domain="105.216.0.40" />
</cross-domain-policy>

ضعه كـ crossdomain.xml في جذر المجال الذي تقوم بالتحميل منه.

تحتاج أيضًا إلى ضبط المُحمل لقراءة هذا الملف على هذا النحو:

var loaderContext:LoaderContext = new LoaderContext();
loaderContext.checkPolicyFile = true;

var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener( Event.COMPLETE, onComplete );
loader.load( new URLRequest( "http://my.domain.com/image.png" ), loaderContext );

عينة التعليمات البرمجية التي تم الحصول عليها من http://blog.log2e.com/2008/08/15/when-a-cross-domain-policy-file-is-not-enough/

ربما System.Security.allowDomain هو ما تحتاجه؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top