【问题标题】:ActionScript: To perform non graphical operationsActionScript:执行非图形操作
【发布时间】:2012-09-16 10:05:33
【问题描述】:

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

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

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

以下可能吗?

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

我想知道,ActionScript 是否能如我所愿。

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

【问题讨论】:

    标签: actionscript-3 web-applications file-upload actionscript


    【解决方案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" 制作透明的 Flash 对象。您不能使用display:nonevisibility (css),因为这样闪存不会执行或动作较慢。为确保它继续运行,请将其放在页面的角落或其他地方position:fixed (css)。当离开屏幕或处于非活动状态(即在非活动选项卡中)时,浏览器使 Flash 对象以一种睡眠模式(较慢)运行

    【讨论】:

    • 嗨,马克。 +1 并感谢您的出色回答。我将使用上面的功能,我发现我尝试完成的工作是完全可行的。因为这个答案完美且最完整地回答了我的问题,所以我将其标记为已接受的答案
    【解决方案2】:

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

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

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

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

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

    【讨论】:

    • +1,谢谢你的好答案。你问我,“我有什么想法”关于在没有图形输出的情况下执行 ActionScript。好吧,我不希望必须包含 Flash 小程序才能将 ActionScript 包含到我的网页中。我认为,ActionScript 是为了支持网站中的 Flash 对象而开发的,因此,它与它们密不可分。
    • 嗯,您需要在页面的某处可见 swf 才能执行 actionscript,这是没有办法的。你不能像 javascript 一样使用它(直接在网页上)。
    • 是的,这就是我的意思。但我认为,具有重要 ActionScript 对象的 Flash 对象可以隐藏在网页上,对吗?换句话说,它不会干扰设计。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-06
    • 1970-01-01
    • 1970-01-01
    • 2023-01-24
    • 2013-01-19
    • 1970-01-01
    • 2013-08-27
    相关资源
    最近更新 更多