【问题标题】:Iframe Javascript call to Flex对 Flex 的 iframe Javascript 调用
【发布时间】:2012-06-25 18:52:48
【问题描述】:

我有一个 flex 应用程序,顶部有一个 iframe。

我想从 iframe 调用以使用 javascript 进行 flex。

到目前为止,我已经尝试过:

这是包含嵌入在 ROOT 文档中的 swf 的 Object

    <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);

仅供参考

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

在我的 IFRAME 中我添加了该功能

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

现在 chrome 出现错误 - Uncaught TypeError: Object [object Object] has no method 'sendToFlash'

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">​
] 

【问题讨论】:

  • 你能把它放在什么地方吗?像 dropbox 或 jsfiddle 或托管?这样我可以帮你调试吗?
  • 该错误是 Flex 错误还是 JavaScript 错误?
  • @www.eugenehp.tk 对不起,我不能

标签: javascript actionscript-3 apache-flex flex3


【解决方案1】:

你能跑吗:

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');
}

编辑

步骤输出

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 应用程序中存在错误

终于解决了

    // 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 初始化后让它工作。

【讨论】:

  • Uncaught SyntaxError: Unexpected token ( 从此,我删除了第 2 步并清除了错误。我现在得到 - step1 [] step3 Uncaught TypeError: Object # has no method 'LogAddItem'跨度>
  • 看起来像 var swf = jQuery("IPRS_Dispatcher", parent.document);没有捕获我需要的对象:(
  • 尝试下一步。你用的是什么浏览器?
  • 看看这里dushyantpatel.wordpress.com/2009/07/20/…你需要将查询加载到每个帧中
  • 没有捕获任何内容 - 查看 swf 页面的完整源代码 查看此usa-dispatcher.mobiletornado.com/test/IPRS_Dispatcher.html的源代码
猜你喜欢
  • 1970-01-01
  • 2015-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-06
  • 2017-04-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多