国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > JS > 正文

JavaScript調用flash.external.ExternalInterface.addCallback注冊的函數在不同瀏覽器下的分析

2024-09-06 12:31:22
字體:
來源:轉載
供稿:網友

  JavaScript在調用flash中使用flash.external.ExternalInterface.addCallback注冊的回調函數時,不同瀏覽器使用的容器對象,和swf文件放置的位置和是否顯示有很大關系,如果未設置對,會找不到flash中注冊的回調函數。

  測試瀏覽器:IE6,IE7,IE8,Firefox3.6,谷歌chrome 14.0.835.202 m

AS腳本

function loadPicture(){//......代碼......//......代碼......}flash.external.ExternalInterface.addCallback("forJS", null, loadPicture);//注冊JavaScript中調用的回調函數



輸出swf到html頁面的JS腳本,swf的ID為swfId

document.write('<div class="dvswf">' + (document.all ? '<object id=swfId classid=clsid:D27CDB6E-AE6D-11cf-96B8-444553540000><param name="src" value="/images/loadSwf.swf"></object>': '<embed id="swfId" type="application/x-shockwave-flash" src="/images/loadSwf.swf"/>') + '</div>');



1)JavaScript如何獲取flash中flash.external.ExternalInterface.addCallback注冊的函數,參考此文章


2)swf的位置和顯示問題
  A)swf元素的display不能設置為none或者容器的display也不能為none,要不找不到注冊的方法,測試代碼如下

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html;charset=gb2312"><style type="text/css">.dvswf{display:none;}</style></head><body><script type="text/javascript">    document.write('<div class="dvswf">' + (document.all ? '<object id=swfId classid=clsid:D27CDB6E-AE6D-11cf-96B8-444553540000><param name="src" value="/images/loadSwf.swf"></object>': '<embed id="swfId" type="application/x-shockwave-flash" src="/images/loadSwf.swf"/>') + '</div>');</script><script type="text/javascript">function $(Id){return document.getElementById(Id);}function getFlashMethod(swfID) {//獲取    if (window[swfID] && window[swfID].forJS) return window[swfID]    if (document[swfID] && document[swfID].forJS) return document[swfID]    if ($(swfID).forJS) return $(swfID)    return false;}function getcontainer() {    var o = getFlashMethod('swfId');    alert(o)//全部輸出為false}</script><input type="button" value="獲取swf容器" onclick="getcontainer()" /><br /></body></html>


  上面為什么getFlashMethod返回的是容器而不是直接返回注冊forJS回調函數,是因為返回forJS的話在Firefox下執(zhí)行此返回的函數會出現“NPMethod called on non-NPObject wrapped JSObject”錯誤,具體參考firefox NPMethod called on non-NPObject wrapped JSObject!錯誤

  解決辦法就是設置div容器的position為absolute不占用文檔內容,left和top設置為負值,不顯示在可見區(qū)域

.dvswf{ position:absolute;left:-100000px;top:-10000px;}



  B)不能在head標簽中輸出swf,要不IE瀏覽器獲取不到flash中flash.external.ExternalInterface.addCallback注冊的函數,測試代碼如下

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html;charset=gb2312"><style type="text/css">/*.dvswf{display:none;}*/</style><script type="text/javascript">    document.write('<div class="dvswf">' + (document.all ? '<object id=swfId classid=clsid:D27CDB6E-AE6D-11cf-96B8-444553540000><param name="src" value="/images/loadSwf.swf"></object>': '<embed id="swfId" type="application/x-shockwave-flash" src="/images/loadSwf.swf"/>') + '</div>');</script></head><body><script type="text/javascript">function $(Id){return document.getElementById(Id);}function getFlashMethod(swfID) {//獲取    if (window[swfID] && window[swfID].forJS) return window[swfID]    if (document[swfID] && document[swfID].forJS) return document[swfID]    if ($(swfID).forJS) return $(swfID)    return false;}function getcontainer() {    var o = getFlashMethod('swfId');    alert(o)//IE瀏覽器輸出flase,Firefox和chrome能獲取到對應的swf容器}</script><input type="button" value="獲取swf容器" onclick="getcontainer()" /><br /></body></html>


  C)如果使用jquery框架,不能使用appendTo,append,html方法添加flash文件,要不IE無法獲取到flash中flash.external.ExternalInterface.addCallback注冊的函數,可以用jquery框架獲取DOM元素后設置DOM元素的innerHTML

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html;charset=gb2312"><style type="text/css">.dvswf{ position:absolute;left:-100000px;top:-10000px;}</style><script type="text/javascript" src="js/jquery.js"></script></head><body><div id="dvswf" class="dvswf"></div><script type="text/javascript">    var swfHTML = document.all ? '<object id=swfId classid=clsid:D27CDB6E-AE6D-11cf-96B8-444553540000><param name="src" value="/images/loadSwf.swf"></object>'        : '<embed id="swfId" type="application/x-shockwave-flash" src="/images/loadSwf.swf"/>';    $(function () {        $('#dvswf').get(0).innerHTML = swfHTML;//0        /*        $(swfHTML).appendTo('#dvswf');//1        $('#dvswf').html(swfHTML);//2        $('#dvswf').append(swfHTML);//3 */    });</script><script type="text/javascript">    function _$(Id) { return document.getElementById(Id); }    function getFlashMethod(swfID) {//獲取        if (window[swfID] && window[swfID].forJS) return window[swfID]        if (document[swfID] && document[swfID].forJS) return document[swfID]        if (_$(swfID).forJS) return _$(swfID)        return false;    }    function getcontainer() {        var o = getFlashMethod('swfId');        alert(o)//只有第0種方法IE才能獲取到swf容器,1,2,3IE都無法獲取到    }</script><input type="button" value="獲取swf容器" onclick="getcontainer()" /><br /></body></html>
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 合江县| 灵山县| 临夏县| 莆田市| 西乡县| 怀柔区| 武冈市| 米泉市| 达州市| 南江县| 镇赉县| 合肥市| 泸溪县| 水城县| 剑河县| 临湘市| 杭州市| 卢龙县| 万山特区| 琼结县| 深圳市| 绥中县| 崇信县| 天台县| 乐陵市| 敦煌市| 鹿泉市| 花垣县| 固始县| 城步| 吴桥县| 枝江市| 全椒县| 平和县| 浦江县| 海兴县| 含山县| 惠来县| 久治县| 阿拉善左旗| 万荣县|