zoukankan      html  css  js  c++  java
  • firefox、 chrome、ie8通过什么方式调用as3 addCallback

    今天几乎花了4、5个小时来处理各种浏览器获取as3 addCallback函数的方法,firefox无论如何都不能调用as3中的ExternalInterface.addCallback方法, google基本都被我翻烂,最后偶然发现……。
    这是嵌入html的代码:

    <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" id="voice" type="application/x-shockwave-flash" data="mp3Player.swf'; ?>" style="border: 0px; overflow-y:hidden; -moz-outline-style: none; outline:none;" width="20px" height="20px">
    <param name="movie" value="mp3Player.swf'; ?>">
    <param name="wmode" value="#fff">
    <param name="quality" value="low">
    <param name="version" value="10.2">
    <param name="allowScriptAccess" value="always">
    <embed width="20" height="20" align="absmiddle" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" allowscriptaccess="always" bgcolor="#fff" quality="high" menu="false" loop="false" src="http://sumsung753.blog.163.com/blog/mp3Player.swf'; ?>" name="voice" haspriority="true">
    </object>

    下面这个是adobe官方提供的方法:
    function thisMovie(movieName) {
    if (navigator.appName.indexOf("Microsoft") != -1) {
    return window[movieName];
    } else {
    return document[movieName];
    }
    }
    在很多时候,上面的方法没有问题,ie8通过window.name获得embed,chrome/firefox通过document.id获得object,你会发现它们返回的都是player对象。
    问题不在这里,如果你在三个浏览器中通过这个对象调用js定义的方法,都能成功;但要是想在js中调用as3中定义的向外提供的函数接口,chrome/ie8会成功,但firefox不行,它始终无法获得addCallback里面的方法。我试过很多方法后,最后发现令人非常诧异的结论,那就是firefox需要通过embed才能使js调用as3暴露的函数接口,我现在用的firefox版本是29.0.1,其它早期的版本是不是这样我不清楚。因此,你想在firefox中使用flash,嵌入object显示没有问题,但要使用里面的方法,得获取embed,因此明智的嵌入flash的做法就像开头代码所写的。一块使用object和embed。
    var thisMovie = (function() {
    return document[objectid] || window[embedname] || $('embed[name="voice"]')[0] || null;
    })();

    // 判断能否获取到as3方法

    $('div.soundmark').find('a').mouseover(function(e){
    if (typeof thisMovie.playMp3 == 'function') {
    thisMovie.playMp3('voice5376395881b32.mp3');
    }
    });

    如果你问上面的firefox已经通过document.id获取到了object就不会再执行下面的$('embed name'),是的,至于为什么这样等有有空再研究。
  • 相关阅读:
    Java基于Redis的分布式锁
    接口测试工具-Jmeter使用笔记(八:模拟OAuth2.0协议简化模式的请求)
    初识HttpRunner
    WebService接口测试
    git使用:本地分支merge到远程分支
    git使用:本地项目推送到gitlab
    模拟网络状况工具——clumsy
    JAVA学习笔记 (okHttp3的用法)
    JAVA学习笔记 (一、入门及前期准备)
    Jenkins+Jmeter持续集成笔记(五:问题优化)
  • 原文地址:https://www.cnblogs.com/sumsung753/p/3821498.html
Copyright © 2011-2022 走看看