2012-06-21 2 views
1

У меня есть приложение flex с iframe, расположенным сверху.Iframe Javascript call to Flex

Я хочу позвонить из iframe, чтобы сгибать с помощью javascript.

До сих пор я попытался это:

Это объект, содержащий SWF встраивания в ROOT документе

<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" 
     id="IPRS_Dispatcher" width="1400" height="1000" 
     codebase="http://fpdownload.macromedia.com/get/flashplayer/current/swflash.cab"> 
     <param name="movie" value="DispatcherMain.swf" /> 
     <param name="quality" value="high" /> 
     <!-- <param name="bgcolor" value="${bgcolor}" /> --> 
     <param name="allowScriptAccess" value="sameDomain" /> 
     <param name='flashVars' value='strLang=english&strIPRSSrvHost=&strGPSSrvHost=192.168.1.130&strGPSSrvSoapPort=8081&strGPSSrvFwdPort=26000&strLoginMode=simple&strSOSSrvHost=192.168.1.80&strSOSSrvSoapPort=8082&strSOSSrvFwdPort=26001&strSOSLoginMode=simple&strUserSIP=&strUserPswd=&nDelayForMapReadySecs=10&nGPSUpdatesRateSecs=120&nGPSSubscriptionsIntervalMinutes=10&nLat=35.0&nLng=32.5&nZoomLevel=5&strClientServiceVersion=2.1.36.19&nPathDotsSize=1&nPathWidth=5&bHideAnnounce=false&bHideEmergencyPan=true&strMapMarkerLabelMode=name&key=ABQIAAAAYbXZyR09wFj6QsiYucHpGxQEO34WZEWuIFq1A7yobGXPE-K5exQV9ZYR6NIkF8LCR8wsYvlhOIYsfA' /> 
     <embed id="IPRS_Dispatcher2" src="DispatcherMain.swf" 
      flashVars='strLang=english&strIPRSSrvHost=&strGPSSrvHost=192.168.1.130&strGPSSrvSoapPort=8081&strGPSSrvFwdPort=26000&strLoginMode=simple&strSOSSrvHost=192.168.1.80&strSOSSrvSoapPort=8082&strSOSSrvFwdPort=26001&strSOSLoginMode=simple&strUserSIP=&strUserPswd=&nDelayForMapReadySecs=10&nGPSUpdatesRateSecs=120&nGPSSubscriptionsIntervalMinutes=10&nLat=35.0&nLng=32.5&nZoomLevel=5&strClientServiceVersion=2.1.36.19&nPathDotsSize=1&nPathWidth=5&bHideAnnounce=false&bHideEmergencyPan=true&strMapMarkerLabelMode=name&key=ABQIAAAAYbXZyR09wFj6QsiYucHpGxQEO34WZEWuIFq1A7yobGXPE-K5exQV9ZYR6NIkF8LCR8wsYvlhOIYsfA' 
      width="1400" height="1000" name="IPRS_Dispatcher" align="middle" 
      play="true" 
      loop="false" 
      quality="high" 
      allowScriptAccess="sameDomain" 
      type="application/x-shockwave-flash" 
      pluginspage="http://www.adobe.com/go/getflashplayer"> <!-- bgcolor="${bgcolor}" --> 
     </embed> 
</object> 

я добавил addcallback для функции я хочу выставить

ExternalInterface.addCallback("sendToFlash", callFromJavaScript); 

FYI

public function callFromJavaScript(str):void 
    { 
    LogAddItem(30, str); 
    } 

В моем IFRAME я добавил функцию

function callToFlash(str) 
{ 
    var swf = parent.top.$("#IPRS_Dispatcher"); 
    var bool = swf.sendToFlash(str); 
} 

Теперь получаю ошибку в хроме - Uncaught TypeError: Object [объект Object] имеет не указан метод '' sendToFlash

UPDATE 25/06/2012 - выход из console.log (SWF)

[ 
<embed src=​"DispatcherMain.swf" width=​"100%" height=​"100%" align=​"middle" id=​"IPRS_Dispatcher" quality=​"high" name=​"IPRS_Dispatcher" wmode=​"opaque" allowfullscreen=​"true" allowscriptaccess=​"always" pluginspage=​"http:​/​/​www.adobe.com/​go/​getflashplayer" flashvars=​"strOEM=mt&strSplashImage=./​assets/​loadinglogo.jpg&strLang=english&strSelectableLangs=english,chinese, portuguese_brazil,german,french,spanish&strIPRSSrvHost=85.118.26.10&strGPSSrvHost=85.118.26.16&strGPSSrvSoapPort=8081&strGPSSrvFwdPort=26000&strLoginMode=simple&strUserSIP=&strUserPswd=&strSOSSrvHost=85.118.26.17&strSOSSrvSoapPort=8082&strSOSSrvFwdPort=26001&strClientServicePort=&strSOSLoginMode=simple&themeColor=a7c3e3&showRTTPriority=false&showGPSUpdateRate=true&nSamePosErrMeters=300&nDelayForMapReadySecs=10&nGPSUpdatesRateSecs=65535&nGPSSubscriptionsIntervalMinutes=10&nLat=48.311058&nLng=11.636753&nZoomLevel=13.0&strClientServiceVersion=2.1.36.04&bDispatcherEndsSessions=true&nSOSSubscriptionsIntervalMinutes=1&GPSKATime=20&SOSKATime=20&nPathDotsSize=2&nPathWidth=5&bHideAnnounce=false&bHideEmergencyPan=false&bHideDebugLog=false&showMutedColumn=false&strLogFilter=&strMapMarkerLabelMode=name&key=ABQIAAAAfJEcVYS6-jYp2UOUy8Wh5xSCeXAFBxztfWxjY5w1WzTnKjnSVRS7Uu5XoOIwTg2R_tq_c0QSCPxSHw" type=​"application/​x-shockwave-flash">​ 
] 
+0

вы можете положить его где-нибудь? как Dropbox или jsfiddle или хостинг? поэтому я могу помочь вам с отладкой? –

+0

Является ли эта ошибка ошибкой Flex или ошибкой JavaScript? – JeffryHouser

+0

Ошибка JavaScript –

ответ

2

вы можете запустить пожалуйста:

function sendToActionscript(str) 
{ 
    var swf = jQuery("#IPRS_Dispatcher", parent.document); 
    console.log('step1'); 
    console.log(swf); 
    console.log('step2'); 
    console.log.(swf.html()); 
    console.log('step3'); 

    swf.LogAddItem(30, str); 
    console.log('step4'); 
} 

Хорошо, следующий шаг отладки: запустить это:

function sendToActionscript(str) 
{ 
    var swf = parent.top.$(“#IPRS_Dispatcher”); 
    console.log('step1'); 
    console.log($); 
    console.log('step2'); 
    console.log.(jQuery); 
    console.log('step3'); 
    console.log(parent.document); 
    console.log('step4'); 
} 

EDIT

ЭТАПЫ ВЫХОДА

step1 
function (j,s){return new b.fn.init(j,s)} iframecontent.html:49 
step2 
[ 
<embed src=​"DispatcherMain.swf" width=​"100%" height=​"100%" align=​"middle" id=​"IPRS_Dispatcher" quality=​"high" name=​"IPRS_Dispatcher" wmode=​"opaque" allowfullscreen=​"true" allowscriptaccess=​"sameDomain" pluginspage=​"http:​/​/​www.adobe.com/​go/​getflashplayer" flashvars=​"strOEM=mt&strSplashImage=./​assets/​loadinglogo.jpg&strLang=english&strSelectableLangs=english,chinese, portuguese_brazil,german,french,spanish&strIPRSSrvHost=85.118.26.10&strGPSSrvHost=85.118.26.16&strGPSSrvSoapPort=8081&strGPSSrvFwdPort=26000&strLoginMode=simple&strUserSIP=&strUserPswd=&strSOSSrvHost=85.118.26.17&strSOSSrvSoapPort=8082&strSOSSrvFwdPort=26001&strClientServicePort=&strSOSLoginMode=simple&themeColor=a7c3e3&showRTTPriority=false&showGPSUpdateRate=true&nSamePosErrMeters=300&nDelayForMapReadySecs=10&nGPSUpdatesRateSecs=65535&nGPSSubscriptionsIntervalMinutes=10&nLat=48.311058&nLng=11.636753&nZoomLevel=13.0&strClientServiceVersion=2.1.36.04&bDispatcherEndsSessions=true&nSOSSubscriptionsIntervalMinutes=1&GPSKATime=20&SOSKATime=20&nPathDotsSize=2&nPathWidth=5&bHideAnnounce=false&bHideEmergencyPan=false&bHideDebugLog=false&showMutedColumn=false&strLogFilter=&strMapMarkerLabelMode=name&key=ABQIAAAAfJEcVYS6-jYp2UOUy8Wh5xSCeXAFBxztfWxjY5w1WzTnKjnSVRS7Uu5XoOIwTg2R_tq_c0QSCPxSHw" type=​"application/​x-shockwave-flash">​ 
] 
step3 iframecontent.html:52 
#document 
step4 

хорошо, так что теперь просто попробовать

function sendToActionscript(str) 
{ 
    var swf = parent.top.$(“#IPRS_Dispatcher”); 
    swf.LogAddItem(30, str); 
} 

есть ошибка в вашем приложении flex enter image description here

Наконец Решенный

// get flash movie object 
var flashMovie; 
function init() { 
    if (document.getElementById) { 
     flashMovie = parent.document.getElementById("IPRS_Dispatcher"); 
    } 
} 

// wait for the page to fully load before initializing 
window.onload = init; 

function callToFlash(str) 
{ 
    var bool = flashMovie.sendToFlash(str); 
} 

Я думаю, что ждет страница полной загрузки перед инициализацией было исправить.

Вы также можете использовать http://api.jquery.com/ready/

$(document).ready(init); 

, чтобы получить его работу после DOM инициализации.

+0

Uncaught SyntaxError: Неожиданный токен (из этого я удалил шаг 2, и ошибка очистилась.i now get - step1 [] step3 Uncaught TypeError: Object # не имеет метода «LogAddItem» –

+0

выглядит как var swf = jQuery («IPRS_Dispatcher», parent.document); isnt захват объекта, который мне нужен :( –

+0

попробуйте следующий шаг. В каком браузере вы находитесь? –