﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-分享ｊａｖａ带来的快乐-文章分类-Flash</title><link>http://www.blogjava.net/lyjjq/category/51450.html</link><description>我喜欢ｊａｖａ新东西</description><language>zh-cn</language><lastBuildDate>Thu, 19 Apr 2012 15:27:59 GMT</lastBuildDate><pubDate>Thu, 19 Apr 2012 15:27:59 GMT</pubDate><ttl>60</ttl><item><title>flash中ExternalInterface不会造成方法覆盖</title><link>http://www.blogjava.net/lyjjq/articles/375312.html</link><dc:creator>强强</dc:creator><author>强强</author><pubDate>Thu, 19 Apr 2012 14:52:00 GMT</pubDate><guid>http://www.blogjava.net/lyjjq/articles/375312.html</guid><wfw:comment>http://www.blogjava.net/lyjjq/comments/375312.html</wfw:comment><comments>http://www.blogjava.net/lyjjq/articles/375312.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lyjjq/comments/commentRss/375312.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lyjjq/services/trackbacks/375312.html</trackback:ping><description><![CDATA[<p>在JavaScript与Flash的通信一文中我介绍了利用ExternalInterface来实现的JS与AS双向通信，有朋友跟我提出疑问如果AS或者JS中都定义了同名函数，那么会造成方法覆盖吗？这的确是个需要考虑的问题，通过测试证明，即使出现了同名方法的定义，它们也是相互独立的，不会造成方法覆盖。 </p><p>　　一、AS调用JS方法时出现同名方法（查看实例）</p><p>　<br />&nbsp;&nbsp;&nbsp; AS代码如下：<br />&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; import flash.external.*;<br />&nbsp;&nbsp;&nbsp; var v =ExternalInterface.available;<br />&nbsp;&nbsp;&nbsp; t_btn.onRelease = function (){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //调用JS函数<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var s = ExternalInterface.call("say","JS函数调用成功!")<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //调用AS本地函数<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s +=say("\n本地函数调用成功!");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; r_txt.text = s;<br />&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; //AS本地函数<br />&nbsp;&nbsp;&nbsp; function say(s){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return s;<br />&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; HTML代码： <br />&nbsp;&nbsp; //定义一个JS函数<br />&nbsp;&nbsp; function say(txt){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return txt;<br />&nbsp;&nbsp;&nbsp; }</p><p>　可以看到在JS中定义了一个say方法供AS调用，现在我们在AS中定义了一个同名的say方法来验证它们是否会出现覆盖。结果证明它们不会覆盖，都工作得很好。(PS:不错～)</p><p><br />二、JS调用AS方法时出现同名方法（查看实例）</p><p><br />　　AS代码如下：//导入包<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; import flash.external.*;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //提供JS访问的函数名<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var _method:String = "say";<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //指定本地函数中this变量的作用域，可设置为null留空<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var e_area:Object =null;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //AS内部函数名<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var method:Function = say;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //将函数注册到容器列表<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var wasSuccessful:Boolean = ExternalInterface.addCallback(_method, e_area, method);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //查看注册是否成功<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(wasSuccessful){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result_txt.text = "函数注册成功";<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //本地的函数<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; function say(txt:String) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result_txt.text = txt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p><p>&nbsp;&nbsp;&nbsp; HTML代码如下：<br />&nbsp;&lt;div&gt;<br />&nbsp;&nbsp;&lt;form&gt;<br />&nbsp;&nbsp;&nbsp;&lt;input type="button" onclick="callExternalInterface()" value="JS调用AS方法" /&gt;<br />&nbsp;&nbsp;&lt;/form&gt;<br />&nbsp;&nbsp;&lt;script&gt;<br />&nbsp;&nbsp;&nbsp;function callExternalInterface() {<br />&nbsp;&nbsp;&nbsp;&nbsp;thisMovie("demo").say("Hello,World");<br />&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;//浏览器兼容访问DOM<br />&nbsp;&nbsp;&nbsp;function thisMovie(movieName) {<br />&nbsp;&nbsp;&nbsp;&nbsp;if (navigator.appName.indexOf("Microsoft") != -1) <br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return window[movieName]<br />&nbsp;&nbsp;&nbsp;&nbsp;}else{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return document[movieName]<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;//定义一个JS本地函数<br />&nbsp;&nbsp;&nbsp;function say(s){<br />&nbsp;&nbsp;&nbsp;&nbsp;alert(s);<br />&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&lt;/script&gt;<br />&nbsp;&lt;/div&gt;</p><p><br />　　可以看到在AS中定义了一个say方法供JS调用，现在我们在JS中定义了一个同名的say方法来验证它们是否会出现覆盖。结果证明它们不会覆盖，都工作得很好。(PS:也不错～)</p><p><br />　　通过上面的两个例子我们可以得出结论在使用ExternalInterface时即使定义了同名方法，也不会造成方法覆盖，你大可放心使用<br /></p> <img src ="http://www.blogjava.net/lyjjq/aggbug/375312.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lyjjq/" target="_blank">强强</a> 2012-04-19 22:52 <a href="http://www.blogjava.net/lyjjq/articles/375312.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>