通过javascript控制flash

昨天研究一个用C#写的自动化应用,针对一个网页的按钮进行点击操作,这一步可以用javascript很自然的解决(见:利用JavaScript从UIWebView获取、修改、提交网页内数据的方法)。

怎么在C#中利用webbrowser运行javascript可以参见:C#中让WebBrowser运行Javascript脚本

然后页面居然弹出来一个flash,第二步的操作时针对这个flash的。为了解决这个问题,只好对flash进行反编译(用到了一个叫做“硕思闪客精灵”的软件),才看到里面的代码。好在于网上有很多关于javascript和flash的交互方法。可以通过javascript来调用flash中的方法。在查看了flash的源代码之后,发现需要调用其中一个函数(叫做function吧)。

实现方法就是:
第一步,拿到flash对象
好在于在页面内部我直接找到了这个函数,要针对不同的浏览器用不同的方式获取,代码如下:

  1. function getSWF(a){
  2.   if(navigator.appName.indexOf(\”Microsoft\”)!=-1){
  3.     return window[a];
  4.   } else {
  5.     if(window.navigator.userAgent.indexOf(\”Firefox\”)!=-1){
  6.       return document[a];
  7.     } else {
  8.       if(window.navigator.userAgent.indexOf(\”Chrome\”)!=-1){
  9.         return document[a];
  10.       } else {
  11.         if(window.navigator.userAgent.indexOf(\”Safari\”)!=-1){
  12.           return document.getElementById(a);
  13.         } else {
  14.           if(window.navigator.userAgent.indexOf(\”Opera\”)!=-1){
  15.             return document[a];
  16.           }
  17.         }
  18.       }
  19.     }
  20.   }
  21. }
  1. flash=getSWF(‘flashName’);

第二步,调用flash中的方法

  1. flash.function();

另外一些可用的方法如下:
播放:Play()
停止: StopPlay()
停止并回到首帧: Rewind()
下一帧: TGetProperty(nameOfTargetMovieClip, propertyIndex) and GotoFrame(frameNum)
方大或缩小: Zoom(relative percentage)
发送数据: SetVariable(variableName, variableValue)
读取数据: GetVariable(variableName)