Blame view

static/plugins/webshim-gh-pages/js-webshim/dev/shims/swfmini-embed.js 4.55 KB
831eac332   zhuzhenchao   add file
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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
  webshims.register('swfmini-embed', function($, webshims){
  	var swfmini = window.swfmini;
  	var objIdArr = [];
  	var ua = swfmini.ua;
  	var doc = document;
  	var FLASH_MIME_TYPE = "application/x-shockwave-flash";
  
  	var UNDEF = "undefined";
  	var OBJECT = "object";
  	var hasPlayerVersion = swfmini.hasFlashPlayerVersion;
  
  	/* Cross-browser dynamic SWF creation
  	 */
  	function createSWF(attObj, parObj, id) {
  		var r, el = getElementById(id);
  		if (ua.wk && ua.wk < 312) { return r; }
  		if (el) {
  			if (typeof attObj.id == UNDEF) { // if no 'id' is defined for the object element, it will inherit the 'id' from the alternative content
  				attObj.id = id;
  			}
  			if (ua.ie && ua.win) { // Internet Explorer + the HTML object element + W3C DOM methods do not combine: fall back to outerHTML
  				var att = "";
  				for (var i in attObj) {
  					if (attObj[i] != Object.prototype[i]) { // filter out prototype additions from other potential libraries
  						if (i.toLowerCase() == "data") {
  							parObj.movie = attObj[i];
  						}
  						else if (i.toLowerCase() == "styleclass") { // 'class' is an ECMA4 reserved keyword
  							att += ' class="' + attObj[i] + '"';
  						}
  						else if (i.toLowerCase() != "classid") {
  							att += ' ' + i + '="' + attObj[i] + '"';
  						}
  					}
  				}
  				var par = "";
  				for (var j in parObj) {
  					if (parObj[j] != Object.prototype[j]) { // filter out prototype additions from other potential libraries
  						par += '<param name="' + j + '" value="' + parObj[j] + '" />';
  					}
  				}
  				el.outerHTML = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"' + att + '>' + par + '</object>';
  				objIdArr[objIdArr.length] = attObj.id; // stored to fix object 'leaks' on unload (dynamic publishing only)
  				r = getElementById(attObj.id);
  			}
  			else { // well-behaving browsers
  				var o = createElement(OBJECT);
  				o.setAttribute("type", FLASH_MIME_TYPE);
  				for (var m in attObj) {
  					if (attObj[m] != Object.prototype[m]) { // filter out prototype additions from other potential libraries
  						if (m.toLowerCase() == "styleclass") { // 'class' is an ECMA4 reserved keyword
  							o.setAttribute("class", attObj[m]);
  						}
  						else if (m.toLowerCase() != "classid") { // filter out IE specific attribute
  							o.setAttribute(m, attObj[m]);
  						}
  					}
  				}
  				for (var n in parObj) {
  					if (parObj[n] != Object.prototype[n] && n.toLowerCase() != "movie") { // filter out prototype additions from other potential libraries and IE specific param element
  						createObjParam(o, n, parObj[n]);
  					}
  				}
  				el.parentNode.replaceChild(o, el);
  				r = o;
  			}
  		}
  		return r;
  	}
  
  
  
  	function createElement(el) {
  		return doc.createElement(el);
  	}
  
  	function createObjParam(el, pName, pValue) {
  		var p = createElement("param");
  		p.setAttribute("name", pName);
  		p.setAttribute("value", pValue);
  		el.appendChild(p);
  	}
  
  
  	/* Functions to optimize JavaScript compression
  	 */
  	function getElementById(id) {
  		var el = null;
  		try {
  			el = doc.getElementById(id);
  		}
  		catch (e) {}
  		return el;
  	}
  
  	swfmini.embedSWF = function(swfUrlStr, replaceElemIdStr, widthStr, heightStr, swfVersionStr, xiSwfUrlStr, flashvarsObj, parObj, attObj, callbackFn) {
  		var callbackObj = {success:false, id:replaceElemIdStr};
  		if (ua.w3 && !(ua.wk && ua.wk < 312) && swfUrlStr && replaceElemIdStr && widthStr && heightStr && swfVersionStr) {
  			widthStr += ""; // auto-convert to string
  			heightStr += "";
  			var att = {};
  			if (attObj && typeof attObj === OBJECT) {
  				for (var i in attObj) { // copy object to avoid the use of references, because web authors often reuse attObj for multiple SWFs
  					att[i] = attObj[i];
  				}
  			}
  			att.data = swfUrlStr;
  			att.width = widthStr;
  			att.height = heightStr;
  			var par = {};
  			if (parObj && typeof parObj === OBJECT) {
  				for (var j in parObj) { // copy object to avoid the use of references, because web authors often reuse parObj for multiple SWFs
  					par[j] = parObj[j];
  				}
  			}
  			if (flashvarsObj && typeof flashvarsObj === OBJECT) {
  				for (var k in flashvarsObj) { // copy object to avoid the use of references, because web authors often reuse flashvarsObj for multiple SWFs
  					if (typeof par.flashvars != UNDEF) {
  						par.flashvars += "&" + k + "=" + flashvarsObj[k];
  					}
  					else {
  						par.flashvars = k + "=" + flashvarsObj[k];
  					}
  				}
  			}
  			if (hasPlayerVersion(swfVersionStr)) { // create SWF
  				var obj = createSWF(att, par, replaceElemIdStr);
  
  				callbackObj.success = true;
  				callbackObj.ref = obj;
  			}
  			if (callbackFn) { callbackFn(callbackObj); }
  		}
  		else if (callbackFn) { callbackFn(callbackObj);	}
  	};
  });