Связь Javascript с Flash не работает - PullRequest
0 голосов
/ 31 марта 2011

Я пытаюсь управлять флеш-плеером из javascript, я сделал, как я видел в Интернете, и я получаю сообщение об ошибке «не поддерживается»

вот что я написал:

на js:

function getFlashMovieObject(movieName)
{
  if (window.document[movieName]) 
  {
      return window.document[movieName];
  }
  if (navigator.appName.indexOf("Microsoft Internet")==-1)
  {
    if (document.embeds && document.embeds[movieName])
      return document.embeds[movieName]; 
  }
  else // if (navigator.appName.indexOf("Microsoft Internet")!=-1)
  {
    return document.getElementById(movieName);
  }
}

function SetNum1()
{
    var x=getFlashMovieObject("flashmovie");
    x.Setvariable("z0", "Z0");
    //document.getElementById("flashmovie").setVariable("z0", "Z0");
    alert("hi");
}

на html:

<object id="flashmovie" width="40" height="300">
<param name="movie" value="complex Ex A2P.swf">
<embed src="complex Ex A2P.swf" width="400" height="300">
</embed>
</object>

примечание: я пробовал "Setvariable", "setvariable", "SetVariable" и "setVariable" (разность заглавными буквами)

Ответы [ 2 ]

0 голосов
/ 14 июня 2012

Несколько вещей в дополнение к предыдущим рекомендациям:

Вам нужно убедиться, что ваш флэш-фильм имеет

<param name="allowscriptaccess" value="always">

во встроенном коде. Если это не сработает, попробуйте выйти из функции в javascript, чтобы убедиться, что она существует, прежде чем вызывать ее, как в

var x=getFlashMovieObject("flashmovie");
console.log("function", x.Setvariable);  // see what you get in your console log here

Если вы видите неопределенное в консоли, скорее всего, у вас есть проблема с секвенированием, и вам нужно будет изменить порядок выполнения, чтобы убедиться, что ваш SWF существует и обратный вызов был добавлен до его вызова. Многое происходит в эти доли секунды при инициализации, и вы хотите, чтобы все происходило в правильном порядке.

наконец, если это все еще не работает, возможно, существует проблема безопасности, которую вы можете быстро исправить, добавив

Security.allowDomain('*');

Прямо под определением вашего класса (или где вы храните код) в ActionScript. Если этот последний элемент устраняет проблему, вы можете заглянуть в Security.allowDomain, особенно если вы используете ExternalInterface и вас могут беспокоить атаки межсайтового скриптинга. В большинстве случаев это нормально, но может оказаться очень плохо, если ваш swf имеет доступ к вашей базе данных, будет загружен другими сайтами или областями вашего собственного сайта, которые должны быть безопасными, поэтому используйте глобальное решение выше только с осторожность.

0 голосов
/ 14 июня 2012

Вы можете вызвать функцию JS SetNum1 после загрузки DOM - самый простой способ убедиться в этом - поместить скрипт непосредственно перед тегом </body>.

Также необходимо убедиться, чтоВы включили функцию Setvariable в коде AS:

ExternalInterface.addCalback("Setvariable", setVariable); 
//the second parameter is the function name in the Actionscript code
...