Swi*_*ift 6 javascript actionscript externalinterface nomethoderror
我正在尝试使用ExternalInterface.addCallback
API 调用动作脚本中的函数,但我似乎无法让它工作.这就是我所拥有的:
动作脚本:
//MyClass.as
package {
import flash.display.Sprite;
import flash.external.ExternalInterface;
public class MyClass extends Sprite
{
public function MyClass()
{
ExternalInterface.addCallback('getStringJS', getStringAS);
}
public function getStringAS():String
{
return "Hello World!";
}
}
}
Run Code Online (Sandbox Code Playgroud)
注意:如果重要的话,我正在使用flex mxmlc编译器将其编译为swf.
HTML/JavaScript的:
<!doctype html>
<html>
<head>
<title>User Identification</title>
<head>
<body>
<object id="MyClass" name="MyClass" type="application/x-shockwave-flash" data="MyClass.swf" width="1" height="1">
<param name="movie" value="MyClass.swf">
<embed src="MyClass.swf" width="1" height="1">
</object>
<script type="text/javascript">
var flash = document.getElementById("MyClass");
var str = flash.getStringJS();
alert(str);
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
我得到的错误是:
Uncaught TypeError: Object #<HTMLObjectElement> has no method 'getStringJS'
Run Code Online (Sandbox Code Playgroud)
我还尝试在swf文件未加载的情况下添加超时,但我也没有使用该方法取得任何成功.
有什么想法吗?
干杯,
迈克
我想到了.通过javascipt发出信号的关键方式,ExternalInterface.call
我们确信swf已加载.最"通用"的方法如下:
MyClass.as
//MyClass.as
package {
import flash.display.Sprite;
import flash.external.ExternalInterface;
public class MyClass extends Sprite
{
public function MyClass()
{
ExternalInterface.addCallback('getStringJS', getStringAS);
if (ExternalInterface.available) {
ExternalInterface.call("isConnectedFlex");
}
}
public function getStringAS():String
{
return "Hello World!";
}
}
}
Run Code Online (Sandbox Code Playgroud)
的index.html
<!doctype html>
<html>
<head>
<title>User Identification</title>
<head>
<body>
<object id="MyClass" name="MyClass" type="application/x-shockwave-flash" data="MyClass.swf" width="1" height="1">
<param name="movie" value="MyClass.swf">
<embed src="MyClass.swf" width="1" height="1">
</object>
<script type="text/javascript">
var flash = document.getElementById("MyClass");
function isConnectedFlex() {
var str = flash.getStringJS();
alert(str);
}
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)