整体流程
终于说到整体流程上了。之前的文章一直在解说as中如何来做词法分析,js方面丝毫未提,更没说jssc到底在页面上是怎么工作的。现在,就来详细地解释一下。
环境需求:
现代浏览器(废话)
装有Adobe Flash Player插件,版本号为9或9以上
javascript启用
页面中放入jssc.swf文件
大致流程:
swf文件载入完毕
内嵌在swf中的js首先被执行,寻找页面中所有符合规则的pre节点
顺序遍历这些pre节点,提取每个pre节点的文本内容(即原始代码)
将原始代码传递给swf
swf对传递来的原始代码进行词法分析,并生成一段结果html片段(即一串li节点)
将结果传递回js
js对结果进行包装(一串li节点放入ol节点中,以及标题头、边距和复制等等)
将对应的原始pre节点隐藏(display:none)
将新生成的内容插入原始pre节点的前面
可以看出,js和as耦合的地方在哪里,以及它们之间是如何相互合作的。下面将对以上9个步骤细细说来,希望更多的开发者能提出改进意见~
1.载入swf
这里没什么好说的,在页面底部加入flash标签即可。值得注意的是不同浏览器中标签有所区别,理想情况下可以使用swfobject来插入标准的html标签。不过为了兼容以及简单,一般我是这样做的:
<object classid=”clsid:d27cdb6e-ae6d-11cf-96b8-444553540000″ id=”jssc5″ style=”position:absolute;visibility:hidden;”>
<param name=”movie” value=”jssc5.swf”/>
<param name=”flashvars” value=”find=brush”/>
<embed src=”jssc5.swf” flashvars=”find=brush” name=”jssc5″ type=”application/x-shockwave-flash” style=”position:absolute;visibility:hidden;”/>
</object>
这里面有许多可配置的地方。
object的id和embed的name必须一致且唯一(应该是唯二才对),为了满足不同浏览器的需要。我设为jssc5,这也是默认值。如果和页面上某个节点有冲突需要修改,那么就需要传入参数修改配置。比如说变成jssc5_modify,就得在flashvars中这样做:
<object classid=”clsid:d27cdb6e-ae6d-11cf-96b8-444553540000″ id=”jssc5_modify” style=”position:absolute;visibility:hidden;”>
<param name=”movie” value=”jssc5.swf”/>
<param…

本博客所有文章均采用