【问题标题】:Cannot Call a Flash Function from Javascript无法从 Javascript 调用 Flash 函数
【发布时间】:2013-03-20 11:49:05
【问题描述】:

我一直在这里,找不到答案。我有一个位于 HTML 页面中的 .swf,我试图从 javascript 调用其中的一个函数。我可以从 flash 与 javascript 对话,但我无法让它重新对话。我知道我正确地定位了对象,因为我在其上使用了 console.log() 并确认了它的目标。

我正在从 Flash 触发测试,从 .swf 中调用一个 javascript 函数,并让该函数调用内部 Flash 函数。

Flash 代码:

//adds callback
ExternalInterface.addCallback("sendToFlash", flashTalkedTo);

//function called by the callback
public function flashTalkedTo():void{
    //runs another function in javascript to log a string
    ExternalInterface.call("callMe")
}

//calls javascript that tries to talk to Flash
ExternalInterface.call("catchFromFlash")

Javascript 代码:

//function called by Flash that initiates
function catchFromFlash(){
    talkToFlash()
}

//function that tries to talk to flash
function talkToFlash(){
    document.getElementById('Noodleverse').sendToFlash()
}

//function called by Flash in the end to confirm call made
function callMe(){
    console.log("Call Me")
}

任何帮助都有效,谢谢!

【问题讨论】:

  • 哪个 HTML 元素具有Noodleverse id?显示粗略的 HTML 结构会有所帮助。
  • 并且还在talkToFlash 内执行console.log(document.getElementById('Noodleverse')) 以确认它确实在运行,并且它找到了正确的元素。

标签: javascript flash function externalinterface


【解决方案1】:

Flash 和一般的插件都有些繁琐。它们的行为不像普通元素,它们的功能也不像普通函数。例如,您不能将元素保存到值中并从中调用函数。您还需要小心,因为在某些浏览器中使用object,而在其他浏览器中使用embed

调用函数的最佳方式是使用 swfobject (https://code.google.com/p/swfobject/) 来抽象一切。不过就个人而言,我使用这个(根据经验,也许有人可以提供改进):

HTML:

<object id="myplugin" ...>
    ...
    <embed name="myplugin" ... />
</object>

JavaScript:

var o1=document.myplugin;
if(o1&&!!o1.myFlashFunction){
    return document.myplugin.myFlashFunction(); // DO NOT USE o1 here. It will fail.
}
var o2=window.myplugin;
if(o2&&!!o2.myFlashFunction){
    return window.myplugin.myFlashFunction(); // DO NOT USE o2 here
}

第一种情况 (document) 适用于大多数新浏览器。例如,Chrome 会找到 embed 对象。第二个 (window) 用于 IE 并找到 object(IE,至少是旧 IE,忽略 embed)。我不是 100% 肯定需要第二个,因为 IE 也可能与document 一起使用,所以调用那个巫毒代码。此外window.myplugin 将提供 Chrome、FireFox 等中所有匹配元素的数组(但我们希望这些元素已经得到处理)

【讨论】:

  • 我已经完成了console.log() 的调用,它工作正常。我希望不要使用 SWFObject,因为我已经尝试过了,但它给了我布局问题。
  • @user2225288 所以......你还有问题吗?你试过我发布的代码了吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-08-22
  • 1970-01-01
  • 2018-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-21
相关资源
最近更新 更多