ExternalInterface.call在IE下调用无返回值

2011-03-18 10:16:35

<div class=&#34;cnt&#34; id=&#34;blog_text&#34;> <p>好文章,收藏一下,&amp;nbsp; IE下无&amp;lt;object&amp;gt;的嵌入怎么会有这么多问题呢。</p> <p>&amp;nbsp;</p> <p><span style=&#34;font-family: 宋体; font-size: 16px;&#34;><strong><span style=&#34;font-size: 14px;&#34;>1.ExternalInterface.call的作用</span></strong><br /> <br /> <span style=&#34;font-size: 14px;&#34;>ExternalInterface.call可以在Flash的as程序中调用页面里的js脚本程序,可以是一些自定义的函数,并且可以获取到返回值,这样可以实现当前页面与Flash之间的通信。</span><br /> <span style=&#34;font-size: 14px;&#34;>基本语法是 ExternalInterface.call(functionName:String, ... arguments);</span><br /> <span style=&#34;font-size: 14px;&#34;>functionName是要调用的js函数名,arguments是参数,对于没有形参的函数,arguments可以省略。</span></span></p> <p><span style=&#34;font-family: 宋体; font-size: 16px;&#34;><span style=&#34;font-size: 14px;&#34;>例如</span><br /> <span style=&#34;font-size: 14px;&#34;>页面中可以这样写:</span><br /> </span></p> <p><span style=&#34;font-family: 宋体; font-size: 16px;&#34;><span style=&#34;font-size: 14px;&#34;>Flash中可以这样写:</span><br /> <span style=&#34;font-size: 14px;&#34;>ExternalInterface.call(&amp;quot;say&amp;quot;,&amp;quot;hello!&amp;quot;);</span></span></p> <p><span style=&#34;font-family: 宋体; font-size: 16px;&#34;><strong><span style=&#34;font-size: 14px;&#34;>2.IE下可能会出现的错误</span><br /> </strong><br /> <span style=&#34;font-size: 14px;&#34;>写 了一小段代码,在Firefox下运行很正常,IE下就会报错,错误是&amp;ldquo;null为空或不是对象&amp;rdquo;,找了半天也没发现代码错误所在,解决方法是在引用 Flash的object标签内,随便添加一个id属性就好了。 猜想因为ExternalInterface类是有一个只读的objectID属性的,可能页面里面object没有这个id属性,所以Flash中的 as代码就会执行错误了。</span><br /> <span style=&#34;font-size: 14px;&#34;>当然embed的name属性可能也会有影响,某些浏览器下必须给embed加上name属性,猜测而已。</span></span></p> <p><span style=&#34;font-family: 宋体; font-size: 16px;&#34;><strong><span style=&#34;font-size: 14px;&#34;>3.其他可能出现的错误</span><br /> </strong><br /> <span style=&#34;font-size: 14px;&#34;>Flash帮助文档中写的比较明白,在将 SWF 文件嵌入到 HTML 页中时,请确保 object 和 embed 标签的 id 和 name 属性不包含以下字符:[</span><span style=&#34;color: rgb(255, 0, 0);&#34;><strong><span style=&#34;font-size: 14px;&#34;>. - + * / \</span></strong></span><span style=&#34;font-size: 14px;&#34;>],并且Flash Player 当前不支持嵌入到 HTML 表单中的 SWF 文件。</span></span></p> <p>&amp;nbsp;</p> <p><strong><span style=&#34;font-family: 宋体; color: rgb(255, 0, 0); font-size: 16px;&#34;>例子如下:</span></strong></p> <p><strong><span style=&#34;font-family: 宋体; font-size: 16px;&#34;>flash(AS2)中代码如下:</span></strong></p> <p><span style=&#34;font-size: 12px;&#34;>import flash.external.*;</span></p> <p><span style=&#34;font-size: 12px;&#34;>var sheng:String;</span><br /> <span style=&#34;font-size: 12px;&#34;>var cityStr:String;</span></p> <p><span style=&#34;font-size: 12px;&#34;>sheng = String(ExternalInterface.call(&amp;quot;<span style=&#34;color: rgb(255, 0, 0);&#34;>sheng</span>&amp;quot;));&amp;nbsp; //JS代码中的函数</span><br /> <span style=&#34;font-size: 12px;&#34;>cityStr = String(ExternalInterface.call(&amp;quot;<span style=&#34;color: rgb(255, 0, 0);&#34;>shi</span>&amp;quot;));&amp;nbsp;&amp;nbsp;<span style=&#34;font-size: 12px;&#34;>&amp;nbsp;//JS代码中的函数</span><br /> </span></p> <p><strong><span style=&#34;font-family: 宋体; font-size: 16px;&#34;>HTML(JS)代码</span></strong></p> <p><span style=&#34;font-family: 宋体; font-size: 16px;&#34;><span style=&#34;font-family: Arial; font-size: 12px;&#34;>&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;nbsp;charset=&amp;quot;gb2312&amp;quot;&amp;nbsp;src=&amp;quot;http://fw.qq.com/ipaddress%22%3E%3C/script&amp;gt;</span><br /> <span style=&#34;font-family: Arial; font-size: 12px;&#34;>&amp;nbsp;&amp;nbsp;&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;</span><br /> <span style=&#34;font-family: Arial; font-size: 12px;&#34;>&amp;nbsp;&amp;nbsp;&amp;nbsp;function <span style=&#34;color: rgb(255, 0, 0);&#34;>sheng</span>(){</span><br /> <span style=&#34;font-family: Arial; font-size: 12px;&#34;>&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;var str1=IPData[2];</span></span></p> <p><span style=&#34;font-family: 宋体; font-size: 16px;&#34;><span style=&#34;font-family: Arial; font-size: 12px;&#34;>return Pstr;</span><br /> <span style=&#34;font-family: Arial; font-size: 12px;&#34;>&amp;nbsp;&amp;nbsp;&amp;nbsp;}</span></span></p> <p><span style=&#34;font-family: 宋体; font-size: 16px;&#34;><span style=&#34;font-size: 12px;&#34;><span style=&#34;font-family: Arial;&#34;>&amp;nbsp;function <span style=&#34;color: rgb(255, 0, 0);&#34;>shi</span>(){</span><br /> </span><span style=&#34;font-family: Arial; font-size: 12px;&#34;>&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;var str1=IPData[3];</span> </span></p> <p><span style=&#34;font-family: 宋体; font-size: 16px;&#34;><span style=&#34;font-family: Arial; font-size: 12px;&#34;>return Pstr;</span><br /> <span style=&#34;font-family: Arial; font-size: 12px;&#34;>&amp;nbsp;&amp;nbsp;&amp;nbsp;}</span></span><br /> <span style=&#34;font-family: Arial; font-size: 12px;&#34;>&amp;nbsp;&amp;nbsp;&amp;nbsp;swfobject.registerObject(&amp;quot;<span style=&#34;color: rgb(255, 0, 0);&#34;>FlashID</span>&amp;quot;);&amp;nbsp; //这句代码,在DW插入flash时会自动生成。包括下面Object标签中的id=&amp;ldquo;FlashID&amp;rdquo;都是自动生成的,所以不用纠结</span></p> <p><span style=&#34;font-family: Arial; font-size: 12px;&#34;>&amp;lt;/script&amp;gt;</span></p> <p><span style=&#34;font-family: Arial; font-size: 12px;&#34;><br /> </span><span style=&#34;font-family: 宋体; font-size: 16px;&#34;><span style=&#34;font-family: Arial; font-size: 12px;&#34;>下面是Object的内容,不用纠结,都是自动生成的,不用管它<br /> &amp;lt;object <span style=&#34;color: rgb(255, 0, 0);&#34;>id=&amp;quot;FlashID&amp;quot;</span> classid=&amp;quot;clsid:D27CDB6E-AE6D-11cf-96B8-444553540000&amp;quot; width=&amp;quot;900&amp;quot; height=&amp;quot;591&amp;quot;&amp;gt;</span><br /> <span style=&#34;font-family: Arial; font-size: 12px;&#34;>&amp;nbsp; &amp;lt;param name=&amp;quot;movie&amp;quot; value=&amp;quot;images/index_new.swf&amp;quot; /&amp;gt;</span><br /> <span style=&#34;font-family: Arial; font-size: 12px;&#34;>&amp;nbsp; &amp;lt;param name=&amp;quot;quality&amp;quot; value=&amp;quot;high&amp;quot; /&amp;gt;</span><br /> <span style=&#34;font-family: Arial; font-size: 12px;&#34;>&amp;nbsp; &amp;lt;param name=&amp;quot;wmode&amp;quot; value=&amp;quot;opaque&amp;quot; /&amp;gt;</span><br /> <span style=&#34;font-family: Arial; font-size: 12px;&#34;>&amp;nbsp; &amp;lt;param name=&amp;quot;swfversion&amp;quot; value=&amp;quot;9.0.45.0&amp;quot; /&amp;gt;</span><br /> <span style=&#34;font-family: Arial; font-size: 12px;&#34;>&amp;nbsp; &amp;lt;!-- 此 param 标签提示使用 Flash Player 6.0 r65 和更高版本的用户下载最新版本的 Flash Player。如果您不想让用户看到该提示,请将其删除。 --&amp;gt;</span><br /> <span style=&#34;font-family: Arial; font-size: 12px;&#34;>&amp;nbsp; &amp;lt;param name=&amp;quot;expressinstall&amp;quot; value=&amp;quot;Scripts/expressInstall.swf&amp;quot; /&amp;gt;</span><br /> <span style=&#34;font-family: Arial; font-size: 12px;&#34;>&amp;nbsp; &amp;lt;!-- 下一个对象标签用于非 IE 浏览器。所以使用 IECC 将其从 IE 隐藏。 --&amp;gt;</span><br /> <span style=&#34;font-family: Arial; font-size: 12px;&#34;>&amp;nbsp; &amp;lt;!--[if !IE]&amp;gt;--&amp;gt;</span><br /> <span style=&#34;font-family: Arial; font-size: 12px;&#34;>&amp;nbsp; &amp;lt;object type=&amp;quot;application/x-shockwave-flash&amp;quot; data=&amp;quot;images/index_new.swf&amp;quot; width=&amp;quot;900&amp;quot; height=&amp;quot;591&amp;quot;&amp;gt;</span><br /> <span style=&#34;font-family: Arial; font-size: 12px;&#34;>&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!--&amp;lt;![endif]--&amp;gt;</span><br /> <span style=&#34;font-family: Arial; font-size: 12px;&#34;>&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;param name=&amp;quot;quality&amp;quot; value=&amp;quot;high&amp;quot; /&amp;gt;</span><br /> <span style=&#34;font-family: Arial; font-size: 12px;&#34;>&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;param name=&amp;quot;wmode&amp;quot; value=&amp;quot;opaque&amp;quot; /&amp;gt;</span><br /> <span style=&#34;font-family: Arial; font-size: 12px;&#34;>&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;param name=&amp;quot;swfversion&amp;quot; value=&amp;quot;9.0.45.0&amp;quot; /&amp;gt;</span><br /> <span style=&#34;font-family: Arial; font-size: 12px;&#34;>&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;param name=&amp;quot;expressinstall&amp;quot; value=&amp;quot;Scripts/expressInstall.swf&amp;quot; /&amp;gt;</span><br /> <span style=&#34;font-family: Arial; font-size: 12px;&#34;>&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!-- 浏览器将以下替代内容显示给使用 Flash Player 6.0 和更低版本的用户。 --&amp;gt;</span><br /> <span style=&#34;font-family: Arial; font-size: 12px;&#34;>&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;div&amp;gt;</span><br /> <span style=&#34;font-family: Arial; font-size: 12px;&#34;>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;h4&amp;gt;此页面上的内容需要较新版本的 Adobe Flash Player。&amp;lt;/h4&amp;gt;</span><br /> <span style=&#34;font-family: Arial; font-size: 12px;&#34;>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;</span><a href=&#34;http://www.adobe.com/go/getflashplayer%22%3E%3Cimg&#34;><span style=&#34;font-family: Arial; font-size: 12px;&#34;>http://www.adobe.com/go/getflashplayer&amp;quot;&amp;gt;&amp;lt;img</span></a><span style=&#34;font-family: Arial; font-size: 12px;&#34;>src=&amp;quot;</span><a href=&#34;http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif&#34;><span style=&#34;font-family: Arial; font-size: 12px;&#34;>http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif</span></a><span style=&#34;font-family: Arial; font-size: 12px;&#34;>&amp;quot; alt=&amp;quot;获取 Adobe Flash Player&amp;quot; width=&amp;quot;112&amp;quot; height=&amp;quot;33&amp;quot; /&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;</span><br /> <span style=&#34;font-family: Arial; font-size: 12px;&#34;>&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/div&amp;gt;</span><br /> <span style=&#34;font-family: Arial; font-size: 12px;&#34;>&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!--[if !IE]&amp;gt;--&amp;gt;</span><br /> <span style=&#34;font-family: Arial; font-size: 12px;&#34;>&amp;nbsp; &amp;lt;/object&amp;gt;</span><br /> <span style=&#34;font-family: Arial; font-size: 12px;&#34;>&amp;nbsp; &amp;lt;!--&amp;lt;![endif]--&amp;gt;</span><br /> <span style=&#34;font-family: Arial; font-size: 12px;&#34;>&amp;lt;/object&amp;gt;</span></span></p> </div>