У меня есть простой html-документ с гибким приложением и iframe бок о бок (с использованием таблицы 1x2).Как использовать внешний интерфейс Flex с IFrames?
В приложении flex есть кнопка, которая при щелчке устанавливает свойство «src» iframe в URL-адрес с помощью метода ExnternalInterface.call для вызова функции javascript «doNavClick (url)».
Или это идея.
Когда я комментирую объявление объекта iframe в html, вызов doNavClick работает (я вывожу предупреждение для тестирования) .... но когда присутствует объявление iframe, оно даже не получает вызов , Это как если бы iframe каким-то образом нарушил механизм диспетчеризации вызовов.
Есть ли это для этого?
Проблемный код выглядит следующим образом:
--- Main.mxml
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
paddingLeft="0" paddingRight="0"
paddingTop="0" paddingBottom="0"
>
<mx:Script>
<![CDATA[
import flash.events.MouseEvent;
private function doNavClick(event:MouseEvent):void
{
if (ExternalInterface.available)
{
var url:String = "http://www.google.com"
ExternalInterface.call("doNavClick", url); // Problematic with iframes
}
else
{
mx.controls.Alert.show("External interface not available");
}
}
]]>
</mx:Script>
<mx:VBox width="100%" height="100%">
<mx:Button label="Google" click="doNavClick(event)"/>
</mx:VBox>
</mx:Application>
... и HTML/JavaScript код, содержащий приложение SWF:
- - index.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>My SWF Project</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<script type="text/javascript" src="swfobject.js"></script>
<script type="text/javascript">
swfobject.registerObject("mySWFProj", "9.0.0");
</script>
<style>
html, body, div { height: 99%; }
</style>
</head>
<body>
<table border="1" width="100%" height="100%">
<tbody>
<tr>
<td style="width: 25%; height: 100%">
<div style="width: 100%; height: 100%">
<object id="mySWFProj" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="100%" height="100%">
<param name="allowscriptaccess" value="always" />
<param name="allowfullscreen" value="true" />
<!--[if !IE]>-->
<object type="application/x-shockwave-flash" data="mySWFProj.swf" width="100%" height="100%">
<param name="allowscriptaccess" value="always" />
<param name="allowfullscreen" value="true" />
<!--<![endif]-->
<a href="http://www.adobe.com/go/getflashplayer">
<img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" />
</a>
<!--[if !IE]>-->
</object>
<!--<![endif]-->
</object>
</div>
</td>
<td style="width: 75%; height: 100%">
<div style="width: 100%; height: 100%">
<!-- <iframe id="htmlFrame" width="100%" height="100%" src="http://www.amazon.com"> -->
</div>
</td>
</tr>
</tbody>
</table>
<script type="text/javascript">
function doNavClick(url)
{
alert(url);
//document.getElementById('htmlFrame').src = url;
}
</script>
</body>
</html>
Этот код просто выведет предупреждение обозревателя с помощью URL-адреса google. Если вы раскомментируете объявление iframe (с идентификатором «htmlFrame») и перезагрузите страницу, предупреждение не будет отображаться, на самом деле JavaScript doNavClick (url) никогда не будет вызван.
ОБНОВЛЕНИЕ: Интересно .... когда я изучаю DOM index.html (я использую firebug для этого) тело обычно имеет два дочерних узла - таблицу & скрипт. Когда присутствует объявление iframe, ребенок сценария исчезает ... что объясняет, почему мой ExternalInterface.call никогда не идет нигде. Почему включение iframe приводит к удалению объекта сценария?
UPDATE2: Перемещение сценария doNavScript (url) в «head» документа устраняет эту проблему. Это как если бы объявление iframe препятствовало тому, чтобы другие дети были частью тела ... Я не говорю, что это то, что на самом деле происходит, только то, что это симптом.
Что ваш DoNavClick() выглядит так? – DoctorLouie
Нам нужно увидеть код. Нам нужно посмотреть, как вы вызываете эту функцию, и как выглядит код страницы, и как выглядит функция javascript. –
Совершенно верно ... добавлен код кода :) – Dan