forked from RubyLouvre/mass-Framework
/
create_flash.js
99 lines (87 loc) · 6.05 KB
/
create_flash.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
define(function(){
/**
* 创建Flash对象 by 教主
*
* @param {Element} container 放置flash的容器元素
* @param {Object} info swf的相关信息
* @param {string} [params] 可选的参数
*/
return function (container, info, params) {
/* IE使用appendChild添加object标签是没有用的,只能用innerHTML
在Chrome中,如果object标签前面有一个元素有background-image样式,则很有可能该object不显示
测试代码,保存为html文件,本地Chrome打开,刷新几次会出现该现象
<div style="background-image: url(xxx.png); width: 270px; height: 129px;"></div>
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
type="application/x-shockwave-flash"
codebase=" http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0"
width="600"
height="360">
<param name="allowScriptAccess" value="always" />
<param name="quality" value="high" />
<param name="wmode" value="transparent" />
<param name="movie" value=" http://imgc.zol.com.cn/small_flash_channel/donghua/20060803qrj.swf" />
<embed wmode="transparent"
src=" http://imgc.zol.com.cn/small_flash_channel/donghua/20060803qrj.swf"
quality="high"
width="600"
height="360"
allowscriptaccess="always"
type="application/x-shockwave-flash"
pluginspage=" http://www.macromedia.com/go/getflashplayer" />
</object>
*/
// 只有flash的话,仅使用embed是可以的
// http://www.w3help.org/zh-cn/causes/HO8001 参见“问题分析”的第4点和“解决方案”
// 但是要与flash交互(javascript <-> flash相互调用),IE下就必须用object
// XXX: 需要QA关注
// 由于默认的交互参数是JSON格式,会有双引号,需要转义掉,以免HTML解析出错
params = params && params.replace(/"/g, '"');
var html;
info.id = info.id || 'sdo_beacon_flash' + ( Math.random() * 1000000 | 0);
info.width = info.width || 1;
info.height = info.height || 1;
if ('classid' in document.createElement('object')) {//ie only
// IE下必须有id属性,不然与javascript交互会报错
// http://drupal.org/node/319079
html = '<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" name="' + info.id+ '" ' +
(info.id ? 'id="' + info.id + '" ' : '') +
'width="' + info.width + '" height="' + info.height + '">' +
'<param name="allowScriptAccess" value="always" />' +
'<param name="quality" value="high" />' +
'<param name="wmode" value="window" />' +
'<param name="movie" value="' + info.src + '" />' +
(params ? '<param name="flashvars" value="' + params + '" />' : '') +
'</object>';
} else {
//style="width:1px;height:1px" 是为了保证firefox下正常工作.
html = '<embed style="width:' + info.width +'px;height:' + info.height + 'px;" wmode="window" src="' + info.src + '" quality="high" name="' + info.id + '" ' +
(info.id ? 'id="' + info.id + '" ' : '') +
(params ? 'flashVars="' + params + '" ' : '') +
'width="' + info.width + '" height="' + info.height + '"allowScriptAccess="always" ' +
'type="application/x-shockwave-flash"/>';
}
container.innerHTML = html;
return container.firstChild;
//应注意, container必须在DOM Tree中, 否则 先更新innerHTML,后进入DOM Tree, 部分IE8可能flash无法正常显示,并工作.
}
/** 例子
$.createFlash(container, {
src : url,
width : 50,
height : 50
});
*/
})
/**
应注意: 如果浏览器是firefox, 有可能触发下面这个问题:
flash所在容器,或祖先节点的滚动条的可视状态改变或祖先节点的position的定位方式发生改变.
就会触发一个更高层次的重绘. 导致flash被重新创建, 导致flash发生了reload.
所以document.body, document.documentELement 或flash的容器的overflow的切换,都能触发这个bug.
xp ie6 : KB912945 2/10/2006 参考地址: http://support.microsoft.com/kb/912945
历史问题:
最近微軟出的 patch,搞的是人仰馬翻...因為它讓廣告或是互動的flash變得不太好用. 看看這3個的?係.. KB912945 發佈日期: 2006/2/24 KB912812 發佈日期: 2006/4/11 KB917425 發佈日期: 2006/4/20 於是為了測試,自己去抓下了 KB912945 ,升級..沒想到,網路上的一堆特別寫法都沒用,框框依舊存在..狀況竟然和同事的不同(他們看類似flashObject或是把flash坎到外面是OK的..而我依然會看到框框)..怪了..不該是這個狀況. 今天看到,還有一個patch 版本KB912812也有這個問題,於是把KB912945移除了,裝成KB912812,咦,所有狀況都和同事們相同了,原來公司自動升級的版本是KB912812..但是,問題來了,當初心的是微軟會不會又出X招,讓你不管寫了什麼特殊寫法都沒用..而KB912945,就會讓你有這個狀況... 沒想到誤打誤撞,竟然遇到我的問題... 微軟又出了一個 patch 是 KB917425,安裝後它就會停止 KB912812 的行為.但僅適用於 IE 6.0,哇哩... 有沒有發現這3個奇怪的問題?最簡單的方法是移除前2個patch,你就不用裝第3個patch.但你如果硬是莫名其妙被裝,那只好接受事實... 這到底在搞什麼?
KB947864 2008 年 4 月
包含在安全更新 912812 中的 Internet Explorer ActiveX 更新被禁用
部署用于 Internet Explorer 的更新 912945 后,包含在安全更新 912812 中的 Internet Explorer ActiveX 更新的行为将会被禁用。包含在安全更新 912812 中的安全修补程序仍然存在并起作用。只有 Internet Explorer ActiveX 更新行为被禁用。
2008年才取消这种破玩意的限制.....
*/