再谈IE中Flash控件的自动激活 ObjectWrap


Posted in Javascript onMarch 09, 2007

我在Ajax中国上曾经对比过国内门户网站对Flash激活限制的处理。除了qq.com,各大门户网站上的flash都已经解决了激活限制的问题。淘宝的页面上也常常会使用到Flash,激活限制导致用户的交互性体验感受不够友善。

我们一直想解决此问题。但是国内门户网站的做法都略为麻烦,要么需要为每个flash编写额外的js,要么就是在页面上放置flash的位置打上一块<script>补丁,利用SWFObject或者UFO提供的脚本写入flash。

网易的做法算是最技术的了,它的原理可以简单说一下(感谢在网易工作的朋友的阐析):通过外部引入的js代码覆盖主页面的document.write方法,这样在主页面上利用document.write方法时其实是外部文件的函数来写入的,实现了active控件下载和主页面分离。这样也就避开了激活限制。

可是,以上的所有解决方法,Flash都是通过脚本来写入的。比较注重web标准的网站会附上一段<noscript >来弥补禁用JavaScript的用户。但大多数是置之不理。

一番google(我真的是用了yahoo,不过没找到什么),在SitePoint上发现了一份很有价值的文献ObjectSwap: Bypassing the ActiveX Activation Issue in IE,如获至宝。

ObjectSwap提供的实现只需要在<head>中引入一个脚本。虽然也是使用脚本,但其逻辑是在页面加载完成后,重写一次<object>标签来实现自动激活。页面中的flash依然是标准的HTML。不需要通过document.write写入。而且对于禁用js的用户Flash依然可以正常显示。这应该算是最unobtrusive的一种实现了。

最新的ObjectWrap 可以从这里下载。

原来的脚本有6k,我简化了一些逻辑,并通过条件注释让脚本只为IE6/7服务。让人欣喜的是,不光是Flash,只要是<object>,ObjectWrap都会处理,这样我们在安全登录淘宝或者支付宝输入密码的时候,也可以节约一个单击的气力了。

至于为什么重写<object>可以解决激活限制,就不要深究了,正如IE那一系列让人抓狂的CSS hack。我们只能逼自己记住它,傻瓜才会去弄清楚为什么。

最后向ObjectWrap的作者 Karina Steffens 致敬!

Javascript 相关文章推荐
使用js判断控件是否获得焦点
Jan 03 Javascript
js中的时间转换—毫秒转换成日期时间的示例代码
Jan 26 Javascript
javascript生成随机大小写字母的方法
Feb 20 Javascript
jquery鼠标放上去显示悬浮层即弹出定位的div层
Apr 25 Javascript
javascript实现验证身份证号的有效性并提示
Apr 30 Javascript
如何使用jQuery技术开发ios风格的页面导航菜单
Jul 29 Javascript
jquery.form.js框架实现文件上传功能案例解析(springmvc)
May 26 Javascript
JavaScript如何实现跨域请求
Aug 05 Javascript
详解angularjs实现echart图表效果最简洁教程
Nov 29 Javascript
mui框架 页面无法滚动的解决方法(推荐)
Jan 25 Javascript
angula中使用iframe点击后不执行变更检测的问题
May 10 Javascript
Vue详细的入门笔记
May 10 Vue.js
javascript的对话框详解与参数
Mar 08 #Javascript
打开超链需要“确认”对话框的方法
Mar 08 #Javascript
javascript学习随笔(使用window和frame)的技巧
Mar 08 #Javascript
关于使用runtimeStyle属性问题讨论文章
Mar 08 #Javascript
用js判断用户浏览器是否是XP SP2的IE6
Mar 08 #Javascript
在IE模态窗口中自由查看HTML源码的方法
Mar 08 #Javascript
encode脚本和normal脚本混用的问题与解决方法
Mar 08 #Javascript
You might like
关于mysql 字段的那个点为是定界符
2007/01/15 PHP
PHP 字符串正则替换函数preg_replace使用说明
2011/07/15 PHP
PHP中使用socket方式GET、POST数据实例
2015/04/02 PHP
php使用FFmpeg接口获取视频的播放时长、码率、缩略图以及创建时间
2016/11/07 PHP
php JWT在web端中的使用方法教程
2018/09/06 PHP
js用Date对象处理时间实现思路及代码
2013/01/31 Javascript
JS小功能(button选择颜色)简单实例
2013/11/29 Javascript
jQuery中append()方法用法实例
2015/01/08 Javascript
ANGULARJS中使用JQUERY分页控件
2015/09/16 Javascript
jquery siblings获取同辈元素用法实例分析
2016/07/25 Javascript
Google 地图API资料整理及详细介绍
2016/08/06 Javascript
Json对象和字符串互相转换json数据拼接和JSON使用方式详细介绍(小结)
2016/10/25 Javascript
深入对Vue.js $watch方法的理解
2017/03/20 Javascript
js鼠标经过tab选项卡时实现切换延迟
2017/03/24 Javascript
knockoutjs模板实现树形结构列表
2017/07/31 Javascript
详解关于element el-button使用$attrs的一个注意要点
2018/11/09 Javascript
微信小程序实现用table显示数据库反馈的多条数据功能示例
2019/05/07 Javascript
Vue项目配置跨域访问和代理proxy设置方式
2020/09/08 Javascript
通过滑动翻页效果实现和移动端click事件问题
2021/01/26 Javascript
Python2.7读取PDF文件的方法示例
2017/07/13 Python
Python设计模式之观察者模式简单示例
2018/01/10 Python
python实现用户管理系统
2018/01/10 Python
tensorflow TFRecords文件的生成和读取的方法
2018/02/06 Python
python检测主机的连通性并记录到文件的实例
2018/06/21 Python
推荐10款最受Python开发者欢迎的Python IDE
2018/09/16 Python
基于python实现名片管理系统
2018/11/30 Python
台湾团购、宅配和优惠券:17Life
2017/08/14 全球购物
REISS美国官网:伦敦最受欢迎的时尚品牌
2019/08/16 全球购物
物业管理个人自我评价
2013/11/08 职场文书
网络编辑职责
2014/03/01 职场文书
2015年学校党支部工作总结
2015/04/01 职场文书
网络妈妈观后感
2015/06/08 职场文书
2015年物业公司保洁工作总结
2015/10/22 职场文书
pytorch常用数据类型所占字节数对照表一览
2021/05/17 Python
Python 中random 库的详细使用
2021/06/03 Python
Java方法重载和方法重写的区别到底在哪?
2021/06/11 Java/Android