我已經試過SWFLoader,但問題是加載的內容是MovieClip,我不知道如何與它交互,並且MovieClip#numChildren爲零。如何加載swf並與之交互?
順便說一下,我無法將flashvars傳遞給swf。
我已經試過SWFLoader,但問題是加載的內容是MovieClip,我不知道如何與它交互,並且MovieClip#numChildren爲零。如何加載swf並與之交互?
順便說一下,我無法將flashvars傳遞給swf。
首先,你應該知道你的問題沒有確切的答案,因爲它取決於你加載的SWF(你知道與否,它的顯示列表,......),但我會舉一個簡單的例子來解釋事情,你必須適應你的情況。
對於這個例子,假設我們有一個包含TextField(稱爲txt_url
)和一個按鈕(稱爲btn_go
)的按鈕(MovieClip)的非常簡單的SWF(加載的SWF)。
btn_go
按鈕將打開在txt_url
TextField中輸入的URL。
對於我們的第二SWF(裝載機)中,我們將使用一個Loader
對象加載我們的第一個(在這種情況下將是Loader.content
),然後我們將設置URL(該txt_url
文本),並觸發單擊btn_go
按鈕上的單擊事件。
因此,這裏是我們的loader.swf
的代碼示例:
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, on_SWFLoad);
loader.load(new URLRequest('loaded.swf'));
addChild(loader);
function on_SWFLoad(e:Event): void
{
// get our loaded SWF
var loaded_swf:DisplayObjectContainer = DisplayObjectContainer(loader.content);
// because we know our target objects, we can use "getChildByName()"
// set the URL
TextField(loaded_swf.getChildByName('txt_url')).text = 'http://www.example.com';
// open the URL in the browser by triggering the click event on the "btn_go" button
MovieClip(loaded_swf.getChildByName('btn_go')).dispatchEvent(new MouseEvent(MouseEvent.CLICK));
}
這個例子將直接設置並加載SWF後,打開瀏覽器的URL,當然我們可以單擊後執行該行動按鈕或其他東西,但它只是一個簡單的例子,告訴你如何可以做...
現在,問題是,當我們不知道任何有關加載的SWF及其子(名稱,深度,.. ),在這種情況下,我們應該做更多的努力來做我們想做的事情:我們應該遍歷加載的SWF的整個顯示列表以識別目標對象。
回到我們的例子,讓我們說,我們只知道有一個文本字段,並在舞臺上的按鈕,這樣我們的代碼可以是這樣的,例如:
function on_SWFLoad(e:Event): void
{
var loaded_swf:DisplayObjectContainer = DisplayObjectContainer(loader.content);
var num_children:int = loaded_swf.numChildren;
for(var i:int = 0; i < num_children; i++)
{
var child:DisplayObject = loaded_swf.getChildAt(i);
if(child is TextField)
{
trace(child.name); // gives : txt_url
TextField(child).text = 'http://www.example.com';
}
else
{
if(child.hasEventListener(MouseEvent.CLICK))
{
trace(child.name); // gives : btn_go
child.dispatchEvent(new MouseEvent(MouseEvent.CLICK));
}
}
}
}
再次,這是一個非常簡單的例如只是爲了顯示我們如何繼續...
...
然後約SWF之間傳遞值(PARAMS),看看在my answer of this question,你必須爲一個小例子。
關於Display programming(顯示列表,顯示對象,顯示對象容器...)的更多信息,請參閱here。
希望能有所幫助。
該屬性爲'numChildren',並且可能正在加載的SWF被寫入,以便將其內容直接添加到'stage'。 – Vesper
@Vesper然後我怎麼能與它交互? MovieClip#階段返回null。 –
當您等待SWFLoader/Flex相關答案時...如果您使用AS3代碼(在''內)使用'Loader' API等加載您的SWF,會發生什麼? –