代码之家  ›  专栏  ›  技术社区  ›  Todd Moses

Flash和JavaScript通信问题

  •  0
  • Todd Moses  · 技术社区  · 14 年前

    我有一个as2 flash swf,它使用loadmovienum(“flash.swf”,2)调用另一个as2 flash文件,还有一个javascript文件使用计时器调用页面上的函数。这就是我在使用Flash10的火狐中得到的(IE8没有给出错误消息):

    未捕获异常:调用时出错 NPObject上的方法![插件例外: ActionScript出错。使用尝试/捕捉 阻止以查找错误。]

    怎么了?我看不出有什么问题。假设清除嵌入式SWF的内容,并使用一个flash alert对话框确认是或否。

    闪光灯:

    import flash.external.ExternalInterface;
    import mx.controls.Alert;
    
    System.security.allowDomain("mydomain.com");
    
    function getTimeOut()
    {
     // Show alert dialog box
     _level2._visible = false;
     Alert.show("You are about to Timeout. Do you want to continue using Courseware?", "Timeout", Alert.YES |
     Alert.NO, this, myClickHandler);
    }
    
    ExternalInterface.addCallback("timeOut", this, getTimeOut);
    
    this.onMouseDown = function(){
     //if not on login
     getURL("javascript:startTimer();");
    };
    
    var myClickHandler:Function = function (evt_obj:Object) {
     switch (evt_obj.detail) {
      case Alert.YES :
       getURL("javascript:buttonEvent('yes');");
       break;
      case Alert.NO :
       getURL("javascript:buttonEvent('no');");
       break;
     }
     _level2._visible = true;
    };
    
    //load courseware
    loadMovieNum("embedded.swf",2);
    

    JavaScript:

    <script type="text/javascript">
      // <![CDATA[
    
      var so = new SWFObject("main.swf", "mainMovie", "100%", "100%", "9", "#083770");
      so.addParam("scale", "noscale");
      so.addParam("quality", "high");
      so.addParam("allowScriptAccess","always");
            so.write("flashcontent");
    
      var timerMin = '<?php echo($timerMinutes); ?>';
      var timer;
      var timer2;
    
      function startTimer()
      {
       var timerMill = 0;
       clearTimeout(timer);
       timerMill = getMillis();
       timer = setTimeout ( 'stopTimer()', timerMill );
      }
    
      function stopTimer()
      {
       clearTimeout(timer);
       timer2 = setTimeout( 'redirectPage()', 60000);
    
       //call flash function
       getFlashMovie("mainMovie").timeOut();
      }
    
      function buttonEvent(evt)
      {
       if(evt == 'yes')
       {
        clearTimeout(timer2);
        startTimer();
       }
       else
       {
        clearTimeout(timer2);
        redirectPage();
       }
      }
    
      function getMillis()
      {
       var milliseconds = 300000;
    
       if(timerMin == parseInt(timerMin))
       {
        //convert to milliseconds
        //60000 milliseconds in 1 minute
        milliseconds = (parseInt(timerMin)) * 60000;
       }
    
       return milliseconds;
      }
    
      function getFlashMovie(movieName)
      {
       var isIE = navigator.appName.indexOf("Microsoft") != -1;
       return (isIE) ? window[movieName] : document[movieName];
       //return document.getElementById(movieName);
      }
    
      function redirectPage()
      {
       top.location = "timeout.php?t=<?php echo($timerMinutes); ?>";
      }
    
      // ]]>
     </script>
    
    1 回复  |  直到 14 年前
        1
  •  0
  •   Todd Moses    14 年前

    相同的旧故事-npobject。

    我把flash从图片中去掉,并用css和javascript实现了同样的功能。解决这个问题的方法是为flash创建一个策略文件,但是对于这么简单的事情,我只是向另一个方向走了,所以不需要调试。