2014-01-23 50 views
2

我想在swf文件加載完成後執行一些Javascript。swf加載後執行js - Captivate

雖然我覺得在這個偉大的職位,How to check if a swf is loaded using JavaScript with swfobject?

但我不確定如何使用pipwerks提醒,由於將Adobe Captivate嵌入有主權財富基金略有不同,請參見下面的代碼。

 
    //Embed SWf using the SWFObject library 
    var so = new SWFObject(CONFIG.FILENAME, CONFIG.SWFOBJ_ID, 
            CONFIG.COURSE_WIDTH, CONFIG.COURSE_HEIGHT, 
            CONFIG.FPVERSION, "#CCCCCC"); 

     so.addParam("quality", "high"); 
     so.addParam("wmode", CONFIG.WMODE); 
     so.addParam("bgcolor", CONFIG.BGCOLOR); 
     so.addParam("menu", "false"); 
     so.setAttribute("name", CONFIG.SWFOBJ_NAME); 
     so.setAttribute("redirectUrl", CONFIG.REDIRECT_URL); 
     so.addParam("AllowScriptAccess","always"); 
     so.write(CONFIG.TARGET); 

我在哪裏可以放置callback函數?

+0

你在使用動作腳本嗎? –

+0

不,只是javascript。 – Mint

+0

它使用什麼版本的SWFObject? –

回答

3

如果您使用的是最新的版本,你可以把回調就像net.uk.sweet描述:

swfobject.embedSWF("movie.swf", "flashcontent", "550", "400", "9", false, false, false, false, callback);

而是擔心一個ActionScript回調,你應該能夠檢測當SWF文件本身完成加載時。

要做到這一點,您首先必須弄清楚如何攔截對象或嵌入元素。最簡單的方法是添加一行,以便您可以將ID添加到元素。

爲了你上面貼so.write之前的代碼塊,添加:

so.addAttribute('id', 'myswf'); 

這應該添加id="myswf"實際生成的HTML。

然後,你要添加的事件監聽器抓住這個值,並增加了一個加載事件。這應該在so.write行之後。

var obj = document.getElementById('myswf'); 
obj.addEventListener('load', /* callback goes here */); 

還有一個潛在的邊緣情況需要與之抗衡。如果SWF已經加載,它可能不會觸發事件偵聽器。有兩種方法可以與此抗衡。

1)在CONFIG.FILENAME之後,添加一個隨機字符串。這將強制視頻始終重新加載。這不是一個很好的解決方案,因爲它強制視頻始終重新加載,但如果SWF很小,則它可以工作。它看起來是這樣的:(用(new Date()).getTime()來產生我們的隨機字符串唯一的時間戳)

var so = new SWFObject(CONFIG.FILENAME + '?' + (new Date()).getTime(), CONFIG.SWFOBJ_ID, 
            CONFIG.COURSE_WIDTH, CONFIG.COURSE_HEIGHT, 
            CONFIG.FPVERSION, "#CCCCCC"); 

2)更新您的SWFObject到最新版本。不幸的是,對於對象我沒有任何其他解決方法可以解決這個問題。根據你的具體情況,你可以做一些其他的技巧,但是我們需要更多關於你想要做什麼的信息。

3

我寧願使用舊的解決方案 - 從閃光燈內設置onLoad來調用javascript函數。 如果您要動態加載影片,您可以創建preroader.swf並將影片的url作爲變量傳遞。 這是更穩定的解決方案

+0

這是一個來自http://www.adobe.com/cn/products/captivate.html的自動生成的Flash文件,我無法向其添加代碼。 – Mint

1

SWFObject對象有一個屬性PercentLoaded

看看這個教程,以幫助實施:link

4

你使用SWFObject(1?)的舊版本不支持回調功能,它可在第2版,您可以看到您使用的版本支持的參數here

如果更新的SWFObject到latest version (2.2)你可以通過你的回調函數中使用的embedSWF功能:

swfobject.embedSWF("movie.swf", "flashcontent", "550", "400", "9", false, false, false, false, callback); 

所有你目前正在傳遞給SWFObject的其他屬性在最新的版本都支持的話,假設你可以控制HTML標記和JavaScript(聽起來像你),升級到最新版本的庫可能是你最好的選擇。

1

你好運! swfjsPreLoader 第二段似乎可以解決您的問題。