2010-05-04 53 views
3

我有一個應用程序需要在一系列行中呈現大約100個閃存圖(以及其他DOM東西),這些行垂直地延伸超出當前可見窗口 - 換句話說,用戶必須向下滾動才能看見所有不同的圖表。Flash SWF不能初始化直到可見 - 我能強制它們初始化嗎?

此應用程序也是動態的,當用戶更改DOM中的值(頁面上的任何位置)時,它需要同時將該更改傳播到所有Flash圖形。

因此,我設置了所有的externalInterface回調函數,並且小心不要讓任何JS開始執行,直到重要的「flashIsReady」調用,並且......直到我試圖更新()新數據。

這是行爲: - 所有的swfs加載(最初)在兩個IE/Fox =好。 - 用新內容在IE中更新swf但不在Fox中=不好 - 用新內容在Fox中更新swfs - 只有IF--我滾動到頁面底部,然後回到頂部 - 之前 - 我觸發了更新()。

然後我開始追蹤每次swf調用JS來說「flash已準備就緒」,並且我意識到,Firfox只會在swf變得可見時呈現swfs。說實話 - 這很好,實際上,我很確定IE也這樣做。但問題是,Firefox不僅不初始化swf,Firefox甚至不會承認swf存在(在onload後期望),如果尚未可見的話。

而且證據是,你得到JS錯誤說:

「[FlashDOMID] .FlashMethod不是一個函數」。

然而,向下滾動了一下,等到它的可見光和突然的軌跡開始照亮了

「Flash就緒」,「Flash就緒」,「Flash就緒」,一旦他們都準備好了,一切工作正常。

有人告訴我,FF不會初始化swf,直到看到 - 我可以強制它嗎?如果您需要,我可以發佈代碼...但它很沉重(很難從其餘的相關內容中刪除),如果可能的話,我想避免它(爲了你的緣故)。

問題很簡單 - 你有過這種情況嗎?如果是的話,你找到了解決方案嗎?現在有沒有人如何強制一個不可見的swf初始化?多謝你們。

回答

3

所以......

很多論壇搜索後 - 我同意,有做這種沒有優雅的方式哈哈!我最終要做的解決方案基本上是爲$(document).ready()上的每個swf創建JS對象。基本上,JS對象具有各種值,其中包括「data」和「isReady」。當一個swf變得可見並且會調用JS來表示「即時可用」時,我會簡單地捕獲這個調用,然後找到它引用的JS對象(我設法通過將每個swf的DOM id作爲它的一個來傳遞flashVars;是的,這讓我感覺很髒)。從那裏開始,基本上只是一個遊戲來確保每個JS都有「isReady」,然後再嘗試操作它。

在這整個混亂中唯一優雅的地方是通過使用JS對象,我仍然可以通過更新其各自JS對象中的「data」屬性將新數據應用於「隱藏」swfs。然後,當一個swf最終變得可見時,我只需更新它擁有的任何數據(即當前數據),它工作得很好,但是,我仍然同意這種情況是不幸的。

所以...... *回答。

-1

我從來沒有真的找到一種強制flash的加載的方式,而不是在頁面初始化之後重新定位元素,強制加載開始然後再次隱藏它們(便宜且討厭,但似乎工作)。

將所有flash元素放置在頁面的左上角(以確保它們在頁面加載時可見),然後使用javascript中的pageLoad函數根據需要重新定位頁面下方的元素。 jQuery的可以讓你用addClass()和removeClass(做這一切真的很容易)函數

1

我知道這可能是一個遲到的答案。

但是,您需要將您的wmode從opaque更改爲wmode =「window」,這就是爲什麼它在Firefox中無法正常工作,IE做了同樣的事情,但只在第一頁加載。

將wmode設置爲opaque會導致firefox在swf被瀏覽器查看之前不初始化swf。但是,這對所有瀏覽器都不一樣。 IE瀏覽器只在第一頁瀏覽量,鉻和Safari瀏覽器根本沒有這樣做。

不幸的是我發現這個問題尋找相反的。我試圖讓所有瀏覽器都無法初始化玩家,直到它在瀏覽器中可見爲止。

+0

很好的回答,爲我工作:) – 2010-12-07 03:43:23