此 Flash 脚本非 ActionScript

简介

除了跑在 Flash Player 中的脚本 ActionScript , Flash 还有一个跑在 Adobe Flash CC 的 JavaScript 。

Flash JavaScript 提供了大量的接口,方便执行制作 flash 的某些操作,比如机械重复的导出等。

Hello World

选择文件,新建,Flash JavaScript File 。

输入

1
alert(1) //干,又不是 XSS

保存。

双击保存的文件运行,或者选择菜单命令,运行命令,选择保存的文件。

成功的话就能看到在 flash 的一个弹框。

Show In Stage

来一个复杂的例子。首先需要寻找借口,可以从官方的 API 手册中查找。

官方手册非常详细,提供的 API 基本覆盖所有能够手动在 Adobe Flash CC 的操作。

比如其中的一页目录是这样的。

Chapter 11: Document object
document.accName . . . 62
document.addDataToDocument() . . . 62
document.addDataToSelection() . . . 63
document.addFilter() . . . 64
document.addItem() . . . 64
document.addNewLine() . . . 65
document.addNewOval() . . . 66
document.addNewPrimitiveOval() . . . 66
document.addNewPrimitiveRectangle() . . . 67
document.addNewPublishProfile() . . . 68
document.addNewRectangle() . . . 69
document.addNewScene() . . . 70
document.addNewText() . . . 71

例如做一个查找库中某个元件在哪里使用了,手册中就有类似的例子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
// 将装有所有图层的数组赋值给 theLayers 
var theLayers = fl.getDocumentDOM().getTimeline().layers;
// 创建一个用于装载所有 "myMovieClip" 实例的数组
var myArray = new Array();
// 计数器
var x = 0;
// 循环所有图层
for (var i = 0; i < theLayers.length; i++) {
// 取第一个图层
// 赋值给 "theElems"
var theElems = theLayers[i].frames[0].elements;
// 循环所有图层上的元素
for (var c = 0; c < theElems.length; c++) {
// 检查是否为实例 (instance)
if (theElems[c].elementType == "instance") {
// 检查是否为 "myMovieClip" 的实例
if (theElems[c].libraryItem.name == "myMovieClip") {
// 装入数组
myArray[x] = theElems[c];
// 递增计数器
x++;
}
}
}
}
// 选择所有 "myMovieClip" 的实例
fl.getDocumentDOM().selection = myArray;

这个例子只能检测当前元件的所有图层,如果要检测元件的子元件还需要调用 document.enterEditMode(),再递归一下就完成了。

百足之虫

Flash 自从乔帮主一战后就萎靡不振,尤其是近几年在前端逐渐式微。

直到最近 Adobe 宣判了 Flash 的死刑, 在 2020 年正式停止支持。

即便如此,国内依然是 Flash 使用的重灾之地。各种令人作呕的页游,不思进取的视频网站还用着 Flash 播放器。

可以想象在很长的一段时间内 Flash 还会在国内苟延残喘。

但是现在确实可以不用学习 Flash 相关的技术了。ActionScript 什么的。

Flash 让制作动画变得很容易,大大丰富了当年前端的表现。

但是十年前已经不是 1997 了,相比于 2008 年,现在离 2020 年更近。

它就像青春,留下了美好的回忆。请让它静静消失而不是吸干最后一点精力,这样回想起那段闪客时代还能欣慰一笑。

Flash 你好, Flash 再见。