生活的沉淀态 希望的萌芽态 平静色|包容色|希望色
« »
2010-04-29博客建设

阅读 336 次

致使用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:

日志信息 »

该日志于2010-04-29 00:10由 世纪之光 发表在博客建设分类下, 你可以发表评论。除了可以将这个日志以保留源地址及作者的情况下引用到你的网站或博客,还可以通过RSS 2.0订阅这个日志的所有评论。

相关日志 »

40条评论

  1. 很棒,支持,分享万岁

  2. A.shun 说道:

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

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

    • 世纪之光 说道:

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

  3. A.shun 说道:

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

    • 世纪之光 说道:

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

  4. tmdab123 说道:

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

    谢谢提醒。哈哈

    我也改过来

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

    • 世纪之光 说道:

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

  6. 卢松松 说道:

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

  7. Firm 说道:

    额,日志的话都还好

  8. 淘宝刷信用 说道:

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

  9. 海天无影 说道:

    Adobe的BUG都给你调试好了

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

    • 世纪之光 说道:

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

  10. ikeeptrying 说道:

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

  11. 妮裳神话 说道:

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

  12. itopdog 说道:

    这个我还用不上,呵呵

  13. 郑州seo 说道:

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

  14. 星火 说道:

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

  15. junjun 说道:

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

  16. 恋鱼随风 说道:

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

  17. 510博客 说道:

    我用的这个就很不错啊!

  18. 老七 说道:

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

  19. I房 说道:

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

  20. 淘宝正品 说道:

    好久没来了..

  21. liuzm 说道:

    五一快乐啊!!
    哈哈,来晚了,还不要介意

  22. 购物返现 说道:

    呵呵,五一放假了。终于可以休息休息了,有空也去我的网站逛逛哦~

  23. 周先生 说道:

    我一直用的是WP播放器,好像是习惯这个了。

  24. 水暖器材批发 说道:

    恭喜恭喜,没想到你博客主题好炫哦

  25. TTkea 说道:

    太高深了,,呵呵,,,玩不转…

  26. SuperRadio 说道:

    我还是在用土豆的播放器。

  27. 飞猪 说道:

    还没遇到过此类。。。

  28. 前端开发 说道:

    HOHO再来看看。欢迎回踩

  29. 朵未 说道:

    不懂代码,呵呵。。。

  30. iso8999 说道:

    看见代码就头痛啊 哈哈

  31. 话说 你也说我的ie下有很多错误,但是这些我一点都不懂的哦!呵呵!不知道是不是模板的问题!

  32. 淘宝刷信誉 说道:

    现在都很少用ie。播放器一直都是用千千静听。感觉还不错。

发表评论 »



楚天互联:美国高速主机月付3元起, 域名注册优惠中..

返回顶部