Связь между JavaScript и Flash - PullRequest
0 голосов
/ 22 марта 2012

Я уже добавил:

ExternalInterface.addCallback('sendToActionScript', setKeyboardFocus);
ExternalInterface.call("setFocus", 'pathfinder');

внутри функции init() моего основного класса.

В html у меня есть это:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
    <title>pathFinder</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <style type="text/css" media="screen">
    html, body { height:100%; background-color: #333333;}
    body { margin:0; padding:0; overflow:hidden; }
    #flashContent { width:100%; height:100%; }
    </style>
 <script type="text/javascript">



 function getFlashMovie(movieName) {
 var isIE = navigator.appName.indexOf("Microsoft") != -1;
 return (isIE) ? window[movieName] : document[movieName];
 }



function callToActionscript(str) 
{  

var fm = getFlashMovie("pathfinder");

fm.sendToActionScript(str);
}

function setFocus(id){ 

 var f =  document.getElementById(id);
 f.focus();
 callToActionscript('test') 

 } 


</script>
</head>
<body>



    <div id="flashContent" align='center'>
<table width="100%" height="100%" border="0" align="center" cellpadding="0"  
cellspacing="0">
<tr>
  <td align="center" valign="middle" bgcolor="#333333"><table width="1050" border="0"       
cellpadding="0" cellspacing="0">

    <tr>
      <td>
    <div align="center">
<OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" 
codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#versio
 n=6,0,0,0" 
WIDTH="1050" 
HEIGHT="600" 
id="pathfinder" 
ALIGN="middle">
<PARAM NAME=movie VALUE="pathFinder.swf"> 
<PARAM NAME=quality VALUE=high> 
<PARAM NAME=bgcolor VALUE=#333333> 
<EMBED src="pathFinder.swf" quality=high bgcolor=#333333 WIDTH="1050" HEIGHT="600" 
NAME="pathfinder" ALIGN="middle" TYPE="application/x-shockwave-flash" 
PLUGINSPAGE="http://www.macromedia.com/go/getflashplayer" allowScriptAccess="always"> 
</EMBED> </OBJECT></div></td></tr></td></tr></table>

    </div>
</body></html>

На главном этапе у меня есть экземпляр динамического текстового поля 'test_txt', чтобы проверить, вызвана ли функция.

Итак, после кода ExternalInterface у меня есть:

private function setKeyboardFocus(str:String):void {
stage.addEventListener(KeyboardEvent.KEY_DOWN,checkKeysDown);
stage.addEventListener(KeyboardEvent.KEY_UP,checkKeysUp)
test_txt.text = str
}

Проблема в том, что flashНе получить фокус клавиатуры (слушатели событий KeyboardEvent никогда не добавляются), функция setKeyboardFocus никогда не вызывается.

Любая помощь?

Ответы [ 2 ]

1 голос
/ 23 марта 2012

Убедитесь, что fm назначается объекту или компоненту встраивания. Вы должны быть в состоянии проверить это, используя инструменты отладки javascript в Chrome или Firefox. Я думаю, что именно здесь ты ошибаешься. Это совершенно нестандартная HTML-оболочка из того, что я видел сам, но, по большей части, кажется, у вас все в порядке. Одна вещь, которая будет неправильной, это то, что тег и информация объекта будут применяться для IE, информация тега Embed будет применяться для браузеров, которые используют плагин Netscape (Firefox ... ну, все, кроме IE). Кроме того, я не вижу идентификатора в элементе Embed, я думаю, что вам нужно также дать этому идентификатору, как вы сделали с Объектом, я не уверен, что вы получите ошибки JavaScript, если вы используете тот же точный идентификатор, Я бы назвал это pathFinderE или что-то в этом роде, а затем изменил бы этот метод:

 function getFlashMovie(movieName) {
 var isIE = navigator.appName.indexOf("Microsoft") != -1;
 return (isIE) ? window[movieName] : document[movieName + "E"];
 }
1 голос
/ 22 марта 2012

Согласно одному из найденных источников, вам нужно добавить allowScriptAccess="always" в двух местах.

  1. Где у вас это есть, в блоке <EMBED ... allowScriptAccess="always"> </EMBED>.
  2. Вам также нужно <PARAM NAME="allowScriptAccess" VALUE="always" > с другими блоками PARAM
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...