Flash wmode=transparent 与TextField不兼容的BUG
在FireFox下,当加载swf的那段<object>或<embed>里的wmode="opaque"或wmode="transparent"时,Flex TextInput和TextArea无法输入正确中文。详见此帖。
经Google之后,很多地方说
“由Flex编译生成的那段JS,可以保证在FireFox的情况下,TextInput和TextArea可以正常输入。”
其实是错的。。。
那段脚本只是用于做Flash Player版本检测和提供deep-link功能(见官方帮助"About the wrapper")
在这篇文章Flash wmode=transparent breaks textinput field中,Adobe的一个工程师(John Dowdell)对这个问题作出了回应:
Asking the browser to do stuff is hard, because they all have fringe behavior.
In this case we’re asking the browser to accept plugin input directly into its own compositing stack, instead of blasting direct to screen.
Weirdest WMODE problem I’ve seen has been one where asking the browser to print the webpage would print the SWF upside down. Others have had accessibility differences.
If it’s just in Player, we can fix it ourselves. But if it’s in the communication with the browsers, it’s harder.
I’m sorry you lost time on it though.
jd/adobe
有个比较山寨的解决方法:然后一个比较山寨的方法,就是利用js监听用户的输入,然后通过js把用户的输入发给swf。
另一个山寨的解决方法,也是和JS配合。自定义了一个文本输入组件,焦点进入该组件时,利用JS在组件对应位置弹出一个对应的HTML的输入框。
http://nwhy.org/flash-swfinputs-solving-mozilla-transparent-mode.html
SWF加密
最近帮编辑部那边做了某款网游的NPC查询器,技术上没啥好说,挺简单的一个东西。但放上网站第二天就给别人盗用了(囧。。。),直接用未破解的swf,然后再我们的水印上盖一层自己的戳……
但swf的加密一直是软肋。找了几个加密软件,都不太好用,不是加密后仍然可以被破解,就是加密后损坏了swf本身。
值得说一下的是doswf,对简单的swf加密效果还是不错,可以有几种加密效果搭配选择,但是是收费的。而且后来发现我的swf加密后,按钮都无法点击了。
有两种简单的初级加密方法:
- 防盗用:URL判断。只要不是在指定域名内,可令程序无法运行。
- 保护源代码:代码混淆。将变量名、方法名都变成随机字符串。
- 保护加载资源的资源:ByteArray加密。将加载的资源先进行二进制级别加密,以ByteArray形式加载到swf后,再解密。这样可以防止在浏览器缓存里直接获取加载的资源。
- 防破解:加壳。同方法3,只是把资源文件变成了swf:把主swf进行二进制级别加密(不再是swf格式),再创建一个专门用于加载、解密主swf的swf,这样就可以起到保护主swf的作用了。
方法3、4可见以下文章:【AS3】利用 ByteArray 将 SWF 重新编码加密
以上方法中:
- 方法1:只要破解了swf,得到源代码,就可以修改指定的域名,因此最好与方法2同时使用。
- 方法2无法保护加载的资源。
- 方法3和方法4,因为解密算法是以明文写在代码里的,因此只要破解了代码,就可以找到解密算法。
另外,现在的swf加密的基础都是基于swf文件格式,这里可以下载相关的pdf,有空研究一下。