1

据我了解,ActionScript 主要用于控制 Flash 网站上的图形输出:例如基于 Flash 的游戏。

但是,我希望 ActionScript 执行与图形输出无关的任务。出于浏览器兼容性原因的任务更适合 ActionScript:例如文件上传。

因此,是否可以使用 ActionScript 代替 JavaScript 或完成 JavaScript 无法完成的任务,例如文件上传?

以下可能吗?

  • 在 HTML 按钮按下时运行 ActionScript?
  • 从 HTML/JavaScript 向 ActionScript 发送信息?
  • 在 ActionScript 中处理没有任何图形输出的信息?
  • 从 ActionScript 到 HTML/JavasScript 的输出信息?

我想知道,如果 ActionScript 可以做我想做的事。

我将有一张要调用的正确函数的图片。

4

2 回答 2

1

你不能真正用 actionscript 替换 javascript,但你可以与之交互。

“在 HTML 按钮按下时运行 ActionScript?” - 是的,这可以通过ExternalInterface.registerCallback. 但是,许多操作(iirc,打开文件浏览器)只能在 Flash 中的用户交互上完成,因此您需要一个 Flash 按钮。

“从 HTML/JavaScript 向 ActionScript 发送信息?” 也可以通过 externalInterface 或 flashvars(但仅在启动时)。

“在 ActionScript 中处理没有任何图形输出的信息?” - 这是一种编程语言,当然。你有什么想法?

“从 ActionScript 到 HTML/JavasScript 的输出信息?” - 是的,也可以通过 ExternalInterface。

于 2012-09-16T10:27:59.127 回答
1

ExternalInterface 是你的朋友: http ://help.adobe.com/nl_NL/Flash/CS5/AS3LR/flash/external/ExternalInterface.html

使用 ExternalInterface 时的一些提示:

  • 在 html 嵌入代码中设置allowScriptAccess为“始终”
  • 确保 flash 在您的 html 代码中有一个 id

一些简单的例子:

1.从javascript中抓取一个值到flash

// actionscript 3 code
if (ExternalInterface.available)
{
  var url:String = ExternalInterface.call("document.location");

  // output to textfield
  var t:TextField = new TextField();
  addChild(t);
  t.text = url;
}

2.从flash调用一个带参数的函数

// actionscript 3 code 
if (ExternalInterface.available)
{
   var result:String = "Flash rocks"
   ExternalInterface.call("alert", result);
}

3.从javascript调用一个带参数的函数到Flash:

// javascript
window.onLoad = function()
{
   document.getElementById('flashId').doSomething("javascript rocks");
}

.. 和

// actionscript 3

if (ExternalInterface.available)
{
   ExternalInterface.addCallback("doSomething", handleSomethingFromJavascript);// links js function to as3 function
   function handleSomethingFromJavascript(value:String):void
   {
      // output to textfield
      var t:TextField = new TextField();
      addChild(t);
      t.text = value;
   }
}

您可以在 flash 和 javascript 之间做很多事情,因为您可以看到集成几乎是无痛的!唯一需要注意的是,在 flash 中 ExternalInterface 不可用,因此您必须在浏览器中进行测试。您可以使用wmode="transparent". 您不能使用display:noneor visibility(css),因为这样闪存不会执行或动作较慢。为了确保它继续运行,请将它position:fixed(css)放在页面的角落或其他地方。浏览器使 Flash 对象在屏幕外或非活动时(即在非活动选项卡中)以一种睡眠模式运行(较慢)

于 2012-09-16T17:58:59.003 回答