Проблема с Flash и JavaScript-связью - PullRequest
0 голосов
/ 10 февраля 2010

У меня есть AS2 Flash SWF, который вызывает другой файл AS2 Flash с помощью loadMovieNum ("flash.swf", 2) и файл JavaScript, который вызывает функцию на странице с помощью таймера. Вот что я получаю в Firefox с Flash 10 (IE8 не выдает сообщения об ошибке):

необработанное исключение: ошибка вызова метод на NPObject! [исключение плагина: Ошибка в Actionscript. Используйте попытку / поймать блок для поиска ошибки.].

Что не так? Я не вижу проблемы. Предполагается очистить содержимое встроенного SWF-файла и использовать диалоговое окно оповещения Flash для подтверждения Да или Нет.

Flash:

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 Ответ

0 голосов
/ 16 февраля 2010

Та же старая история - NPObject.

Я взял Flash из картинки и смог добиться того же, используя CSS и JavaScript. Исправление для этого заключается в создании файла политики для Flash, но для чего-то такого простого я просто пошел другим путем, чтобы не отлаживать.

...