كيفية استدعاء ملف Flex SWF من نطاق بعيد باستخدام Flash (AS3)
إذا كنت قد عملت مع Flash وFlex من قبل، فقد تكون قد واجهت الخطأ المخيف SecurityError
عند محاولة استدعاء ملف SWF من نطاق مختلف. هذا الخطأ، على وجه التحديد Error #2119
، يمكن أن يكون عائقًا في رحلة تطوير تطبيقاتك، مما يمنع التفاعل السلس بين ملفات SWF المستضافة عبر نطاقات مختلفة. اليوم، سنتناول المشكلة ونستكشف كيف يمكنك التعامل مع هذه القضية بشكل فعال باستخدام ActionScript 3 (AS3).
المشكلة: انتهاك صندوق الأمان
تخيل أن لديك ملف Flex SWF مستضافًا على نطاق واحد، دعنا نقول، http://www.a.com/a.swf
، وتريد تحميل ملف SWF مختلف، http://services.nuconomy.com/n.swf
، من نطاق آخر. قد يبدو الكود الخاص بك مثل هذا:
_loader = new Loader();
var req:URLRequest = new URLRequest("http://services.nuconomy.com/n.swf");
_loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onLoaderFinish);
_loader.load(req);
ومع ذلك، عند التنفيذ، تحصل على الاستثناء التالي:
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.
يظهر هذا الخطأ عادةً لأن Flash Player يفرض قيود صندوق الأمان التي تمنع ملفات SWF المرسلة من نطاقات مختلفة من التفاعل مع بعضها البعض بشكل مباشر.
الحل: منح الوصول باستخدام Security.allowDomain()
للسماح بالوصول عبر النطاقات، ستحتاج إلى منح الإذن صراحةً باستخدام طريقة Security.allowDomain()
في ActionScript. إليك كيف يمكنك إعداد هذا الحل بشكل فعال:
الخطوة 1: تعديل ملف SWF الذي تحاول تحميله
في ملف SWF الذي تحاول تحميله (دعنا نسميه http://services.nuconomy.com/n.swf
)، ستحتاج إلى تضمين الشيفرة البرمجية التالية:
import flash.system.Security;
// السماح للنطاق الذي سيتفاعل مع هذا SWF
Security.allowDomain("http://localhost.service:1234");
الخطوة 2: تنفيذ Security.allowDomain() بشكل صحيح
- نطاقات متعددة: إذا كان التطبيق الخاص بك يحتاج إلى السماح بالوصول من نطاقات مختلفة، يمكنك استدعاء
Security.allowDomain()
عدة مرات لكل نطاق. - أفضل الممارسات: كن حذرًا من استخدام
allowDomain()
بشكل مفرط لأنها يمكن أن تعرض ملف SWF الخاص بك لمخاطر أمان. اسمح فقط للنطاقات الموثوقة.
الخطوة 3: اختبار تكوينك
بمجرد أن قمت بتحديث كود SWF، يمكنك تشغيل التطبيق الخاص بك مرة أخرى. إذا تم إعداد كل شيء بشكل صحيح، يجب أن تتمكن من تحميل الفصول من SWF البعيد بدون إثارة أي انتهاكات أمنية.
موارد إضافية
لفهم أفضل، يمكنك الرجوع إلى الوثائق الشاملة من أدوبي حول الأمان في Flash. تحقق من دليل برمجة Flex 3 ActionScript 3 PDF، خاصة الفصل 27 الذي يغطي أمان Flash Player والعرض المتقاطع.
الخاتمة
يمكن أن تكون مواجهة انتهاكات صندوق الأمان محبطة، خاصة عندما تحاول تطبيق ميزات تعزز من وظائف تطبيقك. لحسن الحظ، مع طريقة Security.allowDomain()
، يمكنك تجاوز هذه القيود بسهولة وتمكين التواصل السلس عبر SWFs من نطاقات مختلفة. نفذها بعناية، وتأكد من منح الوصول فقط للنطاقات الموثوقة، وستكون في طريقك إلى تكامل ناجح.
تذكر، إن الممارسات الآمنة في البرمجة ضرورية للحفاظ على نزاهة تطبيقاتك في بيئة متصلة.