سؤال

ما الفرق من الناحية الأمنية بين SWFLoaders التعريفي وبرنامجي؟ في وما يليها. الرمز، loader1 يلقي استثناء أمان بينما loader2 لا.

public someFunction(source:String):void
{
  var loader1:SWFLoader = new SWFLoader();
  loader1.load(source);

  loader2.source = source;
}

...

<mx:SWFLoader id="loader2"/>
هل كانت مفيدة؟

المحلول

وأنا لا أعتقد أن هناك أي اختلاف من الناحية الأمنية. تذكر، MXML يحصل على تحويلها إلى أكشن من قبل mxmlc مترجم قبل بدء تجميع الفعلي، لذلك SWFLoader التعريفي (أو أي عنصر التعريفي آخر، لهذه المسألة) هو مجرد وسيلة مختزلة من خلق شيء بدلا من ذلك من الترميز باليد. يمكنك استخدام الوسيطة -compiler.keep-generated-actionscript mxmlc لمعرفة ما يحصل إنشاء نوع من التعليمات البرمجية من MXML الخاص بك.

والسبب أنك لا تشاهد خطأ وقت التشغيل من خط loader2.source = source; في هذا المثال هو أنه منذ السطر السابق من التعليمات البرمجية استدعاء خطأ، وتنفيذ هذه المهمة يتوقف هناك. محاولة التعليق خارج السطر حيث استدعاء loader1.load(source) وسترى السطر التالي رمي هذا النوع من SecurityError:

SecurityError: Error #2148: SWF file http://example.com/test.swf cannot access local resource file:///Users/username/Desktop/picture.jpg. Only local-with-filesystem and trusted local SWF files may access local resources.
    at flash.display::Loader/_load()
    at flash.display::Loader/load()
    at mx.controls::SWFLoader/loadContent()
    at mx.controls::SWFLoader/load()
    at mx.controls::SWFLoader/commitProperties()
    at mx.core::UIComponent/validateProperties()
    at mx.managers::LayoutManager/validateProperties()
    at mx.managers::LayoutManager/doPhasedInstantiation()
    at Function/http://adobe.com/AS3/2006/builtin::apply()
    at mx.core::UIComponent/callLaterDispatcher2()
    at mx.core::UIComponent/callLaterDispatcher()
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top