Friday, 21st November 2008.

Posted on Thursday, 4th September 2008 by chris

前一阵子写了个Flash网站的框架,类似GaiaFramework,我也想做一个给它有点类似的Flash扩展,让Flash的操作跟简单,省去重复劳动,所以这两天试着写了一下jsfl,一不小心就遇到了一个“SyntaxError:unterminated string literal”的错误。

网上找了一下,也没找到好的解答。后来看了一下代码,终于明白这个错误是如何出现的了。事实上我是在Flash里调用jsfl读取了一个外部的XML文件,然后,试图在扩展面板运行时打印这段XML的内容时出现了这个错误的。
public static function out(m:String)
{
MMExecute(”fl.trace(\”” + m + “\”);”);
}
上面这个就是用来调用jsfl在面板运行时打印读取到了XML内容的ActionScript的代码了,跟GaiaFramework里的是一个样的(算我抄袭他的吧,呵呵!)。也就是调用了fl.trace这个方法打印一个字符串。看上去没什么问题,但是在我把XML作为内容给它时,却出错了,开始还以为是jsfl读取文件时有问题,后来试了一下,把XML中的换行去掉就可以打印。于是,觉得问题还在这个方法了。
再细看这个方法,其实是有问题的,这个跟在jsfl里直接调用fl.trace(m);是不一样的。如果在jsfl中直接调用,那m对于fl.trace这个方法来说就是个字符串变量,fl.trace就是在打印字符串变量了,对于字符串里是不是有换行对这个方法没有影响。
但是上面是在ActionScript中调用fl.trace方法,是没有办法把m这个变量传给fl.trace这个方法的,只能将m变量的值传给fl.trace方法了。”fl.trace(\”” + m + “\”);”这个是一个字符串,而在把它当作jsfl代码执行前,m的值以经是被替换成具体的m变量的值。相当于在执行”fl.trace(\”” + “XXXX”+ “\”);”。而这个时候,如果m的值里面有换行或者”,‘号时,就会导致上面的这段代码不合js语法。最终导致上面的错误。
如果要解决错误,就的让上面的代码符合语法规范,将换行和“,’等符号替换成相应的转意字符。
public static function out(m:String)
{
m = m.replace(/\”/g, “\\\””);
m = m.replace(/\’/g, “\\\’”);
m = m.replace(/[\r\n]+/g, “\\r”);
MMExecute(”fl.trace(\”” + m + “\”);”);
}
上面就是改后的代码,试了一下,错误没有再报,内容也打印出来了。问题解决。其实在其他的javascript中也可能会遇到类似的错误的。

Tags: , , ,
Posted in Flash, JSFL | Comments (0)

Posted on Tuesday, 2nd September 2008 by chris

原文地址:http://www.moock.org/blog/archives/000269.html

Tags:
Posted in Flash | Comments (0)

Posted on Thursday, 14th August 2008 by chris

在Firefox下看上面两个层叠的Flash的显示,效果会很怪异,两个Flash在显示时,层次混乱。下面是相应的代码:
<div style=”z-index:30;”>
<object classid=”clsid:D27CDB6E-AE6D-11cf-96B8-444553540000″ codebase=”http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,28,0″ width=”550″ height=”400″>
<param name=”movie” value=”test0.swf” />
<param name=”quality” value=”high” />
<embed src=”test0.swf”
quality=”high” pluginspage=”http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash”
type=”application/x-shockwave-flash” width=”550″ height=”400″>
</embed>
</object>
</div>
<div style=”z-index:100; margin-top:-300px;”>
<object classid=”clsid:D27CDB6E-AE6D-11cf-96B8-444553540000″ codebase=”http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,28,0″ width=”550″ height=”400″>
<param name=”movie” value=”test1.swf” />
<param name=”quality” value=”high” />
<embed src=”test1.swf” quality=”high” pluginspage=”http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash” type=”application/x-shockwave-flash” width=”550″ height=”400″></embed>
</object>
</div>
在IE下显示没有这个问题。不知道是Firefox的问题,还是Firefox下的Flashplayer的问题。我想了一个解决这个问题的办法,就是将其中的一个或者两个都分别放到另外的页面里,然后通过iframe来加载,而不是直接使用object标签。
下面将主页面index.html的body里面的代码改成下面这样:
<div>
<iframe src=”frame.html” width=”550″ height=”400″ frameborder=”0″></iframe>
</div>
<div style=”margin-top:-300px”>
<object classid=”clsid:D27CDB6E-AE6D-11cf-96B8-444553540000″ codebase=”http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,28,0″ width=”550″ height=”400″>
<param name=”movie” value=”test1.swf” />
<param name=”quality” value=”high” />
<embed src=”test1.swf” quality=”high” pluginspage=”http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash” type=”application/x-shockwave-flash” width=”550″ height=”400″></embed>
</object>
</div>
页面frame.html的body里面的代码如下:
<object [...]

Tags: , ,
Posted in Flash, Flex, HTML, 流水账 | Comments (0)

Posted on Thursday, 7th August 2008 by chris

  每次遇到要在Flash中显示HTML内容,都是噩梦,Flash里的TextField是可以显示HTML内容的,但是,功能确实很差劲,尤其是再遇上对排版要求比较高的时候,TextField是根本做不了的了。有一个开源项目htmlwrapper倒是可以利用一下,htmlwrapper可以让当前的HTML的页面以Flash的形式显示。http://motionandcolor.com/wrapper/这个是它的一个示例,它将一个WordPress的页面用Flash的方式显示出来,你要是查看它的源代码就会发现,所有的内容其实都是写在页面里,而不是Flash里的。但是,我个人觉得把一个本来在浏览器里正常显示的HTML页面放到Flash里显示没什么好处。
  不过嘛,如果用这个项目来把我们要显示的某个HTML加载到我们的Flash里,倒是也不错。只是CSS样式只有部分支持,而且这个项目还有不少的Bug。但是在没有其他解决方法的情况下也只能用这个,总比使用TextField强。

Tags: ,
Posted in ActionScript, Flash | Comments (0)

Posted on Tuesday, 5th August 2008 by chris

  Flash里调试工具是可以实现远程调试的,这个有时也很有用,比如在某些时候,在Flash调用了外部的文件(XML等等),当你在本地DEBUG时,可能就会出现安全沙箱冲突的问题,这个时候,远程调试就派上用场了。
要使用远程调试,首先就是要下一个Debug版的Flash浏览器插件。具体下载网址是:http://www.adobe.com/support/flashplayer/downloads.html
。下载安装好后,下面就是要把你的要调试的Flash发一个Debug版本(SHIFT+CTRL+ENTER),接着使得Flash能够通过http://localhost/XX/XX.swf这样的路径访问,也就是配IIS或者Apache了,然后点击Flash编辑器里的调试->开始远程调试会话->ActionScript 3,最后通过在浏览器里输入http://localhost/XX/XX.swf这样的网址访问你的SWF,这时你发现Flash编辑器里的调试工具就会有响应了。

Tags: ,
Posted in ActionScript, Flash | Comments (0)