致使用flash mp3播放器的博友

前两天,我还刚刚写了一篇很浅显的,关于如何我使用的那个mp3播放器的博文,在我用上它以后,便发现博客在IE下经常报错,刚开始没注意,今天才发现,这报错不是偶尔现象,而是有规律可循。当你第一次打开一个带有播放器的页面后,你再跳转到其它页面的时候,看一看IE的状态栏,肯定有报错信息,海天的这篇文章就是活生生的演示。

作为一个WEB开发人员,我一般都是打开IE的调式功能的,所以那个报错信息,每次都弹出对话框,这种情况我是无法忍受的,只能着手解决这个问题,到网上查了半天,居然发现时Adobe公司的一个bug,个人觉得这是个及其简单的bug,可他们还是通过开发,再通过测试,然后让所有网民都用上的,Adobe公司也有吃错药的时候。

下面终重点说说如何解决这个问题吧,网上查到一些资料,有的话,要给EMBED标签套上OBJECT标签,然后这两个标签都要有加上ID和NAME属性,我试了没用,还有的资料说是重写ACTIONSCRIPT注入到JS的函数,我试了还是没用,但是在他们的基础上改了改代码可以了。

首先,flash mp3 播放器会向JS注入两个函数:

function __flash__addCallback(instance, name) {
  instance[name] = function () { 
    return eval(instance.CallFunction("" + __flash__argumentsToXML(arguments,0) + ""));
  }
}
function __flash__removeCallback(instance, name) {
  instance[name] = null;
}

在调试的时候发现报错的是__flash__removeCallback,这个函数按照网上的资料说是删除播放器下载到内存中的音频数据的,所以还是比较重要的,否则内存会慢慢地被挤满的,目前,我知道的可行方式是重写__flash__removeCallback函数,当然是在JS里重写,Adobe的那套东西,我们肯定无法去重写。

重写函数的时候,灵异的事件发生了,我进行以下形式的重新定义,发现重新定义无效,IE压根就没调用我重写的函数:

window['__flash__removeCallback'] = function (instance, name){
	try {
		if (instance) {
       instance[name] = null;
    }
  } catch (flashEx) {
  }
}

而,如果我加上两句无关紧要的赋值语句,IE便会调用我重写的函数,我被弄的想去撞墙,哎:

window['__flash__removeCallback'] = function (instance, name){
	try {
		var i = 0;
		i = i + 1;
		if (instance) {
       instance[name] = null;
    }
  } catch (flashEx) {
  }
}

懂点代码的博友们,你们觉得var i = 0; i = i + 1;这两个语句有任何作用吗?但就是因为有了这两个废物,我的函数就起作用了,万能的IE,我不得不服。

最后就是将JS引入到博客里面了,对函数的重写,必须要下页面加载完方是最保险的,所以写在footer.php文件的标签后最安全。我是将这几句代码写到一个JS文件里了,要不然还要用PHP的ECHO输出,格式比较麻烦。也就是说在footer.php文件的最后加上以下引用代码即可:

到这里就算基本结束了吧,不过最后还是要鄙视以下Adobe公司写那几行代码的开发人员,然后相关的测试人员,这是很低级的错误,捕获下异常,难道都这么困难吗?目前我博友里的海天无影a shun's blog杂货铺一号苹果三角等都存在这个问题。

今天再补充一段吧,按照上面的思路解决问题的话,不能彻底搞定,当两个页面都有这个播放器的时候,重写的函数会重新被覆盖,导致报错信息依旧,为了大家的身心健康,还是使用优质一点的flash播放器吧,目前我已经改用为另一个,虽然丑了点,但是没有BUG:

小雪转中雪

27 Comments On 致使用flash mp3播放器的博友

  1. avatar

    五一,不妨出去走走.不妨放松呼吸,走向绚丽阳光,把发黄的心事交给流水,向远去的雾霭行个注目礼

  2. avatar

    五一节玩的开心哈。留完言我也要出发了。

  3. avatar

    我用的这个就很不错啊!

  4. avatar

    歌曲有些太前卫了,我要想死 = =

  5. avatar

    听你说我的不报错,我就难得去折腾了

  6. avatar

    就觉得用播放器会拉掉速度。

    • avatar

      @星火 @星火
      大哥,这些flash才几K的大小,会影响你什么速度呢,而且不是自动播放的话又不会自动下载音频文件。

  7. avatar

    你应该把效果贴图放出来 这样我们更直观饿

  8. avatar

    这个我还用不上,呵呵

  9. avatar

    借鉴一下,哪天空了再来安一下,嘿嘿!

  10. avatar

    哥哥的歌真好听~
    不过我还是不将歌放在博客上

  11. avatar

    Adobe的BUG都给你调试好了

    最后又换了一个?看来换了一个就有用了?
    额 难道是播放器的原因

    • avatar

      @海天无影 @海天无影
      是播放器原因肯定是毫无疑问的了,不过Adobe的这个BUG确实是弱智的。
      新换的这个播放器在AS里面有可能没有调用Adobe有BUG的方法,或者是在调用时做特殊处理了。

  12. avatar

    要放51节假日了,呵呵,好高兴啊。来逛一圈,明天就来不了了。

  13. avatar

    额,日志的话都还好

  14. avatar

    考,你啥时候也些技术文章了,
    奇迹啊

  15. avatar

    有时候出现出错,还老是想着用这个,你要是钻牛角尖想着去修复到自己满意,那就不断纠结吧。

    • avatar

      @许哥儿个人博客 @许哥儿个人博客
      这不是钻牛角尖,这是一个开发人员该有的严谨的编码态度,或许你不是干这一行的觉得无所谓,但我必须一丝不苟,不允许错误的存在,因为我尝过那种因小错误被客户大骂的滋味。
      同时,这个flash播放器一点都不花哨,花哨的东西我也不会去使用。

      • avatar

        @世纪之光 @世纪之光

        是这样的
        问题出现了,就是要找出原因来,定位故障。
        这个不是钻牛角尖,是对工作的负责!

  16. avatar

    呵呵!今天看到才发现的,这个播放器个人感觉还是不错的,蛮好看的。

    谢谢提醒。哈哈

    我也改过来

  17. avatar

    拜读了。

  18. avatar

    还好我不是放在侧栏。。
    用的是短代码在日志中插入,有音乐的日志大概是1/8

    • avatar

      @A.shun @A.shun
      出现频率低的话,也就无所谓了,毕竟不是所有人都用IE,就算用IE绝大多数也就是状态栏有错误信息,没几个人会开启调试的。

  19. avatar

    这个现象我还没有留意过。。。谢谢提醒。

    其实我知道自己的博客在IE下(特别是IE6).。简直一塌糊涂。。
    但我不是web开发人员,也不是IE用户。
    博客代码在Opera+Dragonfly环境调试,弄好了在FF下也正常的话就基本收工了。
    不晓得怎么对IE进行hack

    • avatar

      @A.shun @A.shun
      但是IE仍然是绝大多数用户的选择,或者说绝大多数用户暂时还离不开IE。
      只要微软一天没倒下,IE就坚挺得很,我们公司的WEB产品都是只支持IE的,其他浏览器一概枪毙。

  20. avatar

    很棒,支持,分享万岁

| 真的AJAX提交哦

发表评论