Flash的源碼:
package { import flash.display.Sprite; import flash.external.ExternalInterface; import flash.system.Security; import flash.text.TextField; /** * Flash緩存造成的偽沙箱問題演示 * @author qhwa */ public class Main extends Sprite { public function Main():void { var tf:TextField = new TextField(); tf.text = 'flash ready'; tf.autoSize = 'left'; addChild(tf); //允許被所有其他沙箱中的js或flash調(diào)用 Security.allowDomain("*"); start(); } private function start():void { //在基于IE的多標(biāo)簽瀏覽器中,這里運行時可能出錯 ExternalInterface.call("alert", "Hi, flash is ready!"); ExternalInterface.addCallback('drawCircle', drawCircle); } private function drawCircle():void { TextField(getChildAt(0)).appendText('\nDraw a circle'); graphics.beginFill(Math.random() * 0xFFFFFF, .5); graphics.drawCircle( Math.random() * stage.stageWidth, Math.random() * stage.stageHeight, 50); graphics.endFill(); } } }
似乎一旦swf是從緩存中讀取的,allowScriptAccess這個配置就不起作用?為了驗證是不是緩存引起的,我們每次為swf文件地址后面加上隨機的數(shù)字,發(fā)現(xiàn)就不存在上面的問題了。可見這個問題確實是瀏覽器緩存造成的。
為swf文件動態(tài)加時間戳或隨機數(shù),通過防止緩存可以回避掉這個問題。不過這不是一個很好的方案,因為這會極大增加服務(wù)器的壓力,并且導(dǎo)致頁面加載速度一直都很慢。
不過好消息是,目前有個比這個更好的方案:延遲Flash的初始化功能。通過將Flash的ExternalInterface.addCallback時機延后一些,就可以解決這個問題。
出處:alibaba.com中國站
責(zé)任編輯:bluehearts
上一頁 Flash在多標(biāo)簽瀏覽器中的問題 [1] 下一頁 Flash在多標(biāo)簽瀏覽器中的問題 [3]
◎進(jìn)入論壇網(wǎng)頁制作、WEB標(biāo)準(zhǔn)化版塊參加討論,我還想發(fā)表評論。
|