需求总是不断变化的,相信有非常多的人也碰到过类似的问题:比如鼠标移到flash上就把flash放大,鼠标移开就缩小,嗯,说了半天其实这个东西就是用来做广告的。

一般的怎么做的呢?无非是在flash里面用ExternalInterface来调JavaScript,用JavaScript来调整swf的大小或者切换另一个swf,或者索性就在swf的上面覆盖一个透明层(貌似要用空白的图片才好使,否则事件还是会跑到swf里面去,而不是给这个层d),然后用这个层来捕捉事件,然后调整swf的大小。

相信很多“挑剔”的人都和我一样,嫌这个方法太麻烦,又不好看。为什么不能直接写在swf里面呢?我也不知道为什么,Adobe没有提供这个接口……不过ActionScript不是可以调JavaScript吗?而且JavaScript也可以写在ActionScript里面,干嘛不从这里打点主意呢?

很好,actionscript.org上就有一篇很好的文章讲怎么在ActionScript中注入JavaScript或者VBScript。不过,显然是有人和我们一样“挑剔”,利用这个写了一个用来改变自身大小的swf,demo在这里,这里有详细的说明和源码下载

这个方法的唯一难点就在于在这个ActionScript中的JavaScript怎么找到自己的dom对象引用?ActionScript中是没有办法获得这种js的dom引用,也没有办法获取自身的id的。不过我们还有一个标识:URL!找object对象或者embed标签,然后比较url,这样我们就可以找到自己了。

看起来似乎是所有的问题都解决了,BrowserCanvas也是这样做的,并且工作得很好。但是如果我继续挑剔一点,如果在同一个页面上放置两个一样的swf怎么办?

嗯,办法还是有的。比如在swf里面在添加一个随机数或者时间戳做标记,在js查找到相同url的swf的时候,判断一下这个随机数是不是和自己的相等,如果是的话,那就应该是自己了。

2 Comments

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.