2011-09-29 121 views
1

我有兩個SWF:加載程序SWF和加載的SWF。我需要將加載的SWF添加到顯示層次結構中,但我不想讓它可以自由訪問舞臺。例如,它可能試圖改變scaleMode,我不希望這種情況發生。阻止/阻止加載的SWF訪問加載程序階段

限制加載內容訪問舞臺的一些好方法是什麼?例如,我可能想讓它訪問stageWidth和stageHeight,但不是scaleMode或align。建議?

編輯:附加約束

我不能改變有關加載SWF什麼。兩個SWF均位於本地文件系統沙箱中。這些SWF都是在Flash Professional中製作的Flash Player 10,ActionScript 3。不是AIR,不是Flex。

我希望能夠實現代理類或getter以某種方式攔截到舞臺的電話,但我不相信有任何方法。例如,我不相信您可以繼承Stage類並使用該子類代替所有MovieClip中stage屬性引用的普通Stage對象。 stage屬性是隻讀的,所以它不能被Loader交叉腳本指向不同的東西。

回答

1

默認情況下,Flash不會允許子SWF訪問其父級的屬性和方法,因此您不需要執行任何操作。

如果你想允許你需要明確地允許它使用Security.allowDomain()

如果你希望孩子SWF訪問某些屬性,但不是別人,你可以使用一個sandbox bridge(複雜)的訪問。或者你可以讓孩子SWF「聲明」自己想做的事情。例如,向孩子添加諸如「requiredStageWidth」之類的屬性。然後讓父級檢查是否存在此屬性 - 如果它存在,則設置舞臺寬度,否則不執行任何操作。

+0

您假設加載的SWF來自不同的域或沙箱。事實並非如此。他們都在本地文件系統沙箱中,運行在獨立播放器(不在瀏覽器中)。默認情況下,從相同沙箱加載的SWF一旦添加到顯示層次結構中,就可以訪問該舞臺。 requiredStageWidth建議很好,但我無法更改加載的SWF的任何內容。我需要按原樣加載它,並且阻止它進入舞臺的任何嘗試,即使它將在顯示樹中。 – ivanreese

1

一個解決方案可能是覆蓋主swf中的舞臺獲取器,並以這種方式阻止加載的swf訪問它。您雖然必須返回模擬舞臺的有效對象,以防止在加載的swf中嘗試訪問舞臺時發生錯誤。

public override function get stage():Stage{ 
     trace("trying to access stage") 
     return new Object() as Stage 
} 
+0

只有當子訪問具有這個重寫的getter的類實例的stage屬性時,這纔有效。如果任何孩子使用自己的舞臺屬性,則不會調用該吸氣劑。 – ivanreese