在IE下嵌入Flash的两个怪异的问题
问题一
在IE6和IE7中让Flash和JavaScript交互同时不为Object指定id属性(我这里也没有name属性,有name属性的情况我没有测试,可能会没有问题),这时离开当前页面或关闭IE会报告如下的运行时错误:
调试时出现:
1 function __flash__arrayToXML(obj) { 2 var s = "<array>"; 3 for (var i=0; i<obj.length; i++) { 4 s += "<property id=\"" + i + "\">" + 5 __flash__toXML(obj[i]) + "</property>"; 6 } 7 return s+"</array>"; 8 } 9 function __flash__argumentsToXML(obj,index) { 10 var s = "<arguments>"; 11 for (var i=index; i<obj.length; i++) { 12 s += __flash__toXML(obj[i]); 13 } 14 return s+"</arguments>"; 15 } 16 function __flash__objectToXML(obj) { 17 var s = "<object>"; 18 for (var prop in obj) { 19 s += "<property id=\"" + prop + "\">" + 20 __flash__toXML(obj[prop]) + "</property>"; 21 } 22 return s+"</object>"; 23 } 24 function __flash__escapeXML(s) { 25 return s.replace(/&/g, "&").replace(/</g, "<"). 26 replace(/>/g, ">").replace(/"/g, """).replace(/'/g, "'"); 27 } 28 function __flash__toXML(value) { 29 var type = typeof(value); 30 if (type == "string") { 31 return "<string>" + 32 __flash__escapeXML(value) + "</string>"; 33 } else if (type == "undefined") { 34 return "<undefined/>"; 35 } else if (type == "number") { 36 return "<number>" + value + "</number>"; 37 } else if (value == null) { 38 return "<null/>"; 39 } else if (type == "boolean") { 40 return value ? "<true/>" : "<false/>"; 41 } else if (value instanceof Date) { 42 return "<date>" + value.getTime() + "</date>"; 43 } else if (value instanceof Array) { 44 return __flash__arrayToXML(value); 45 } else if (type == "object") { 46 return __flash__objectToXML(value); 47 } else { 48 return "<null/>"; //??? 49 } 50 } 51 function __flash__addCallback(instance, name) { 52 instance[name] = function () { 53 return eval(instance.CallFunction( 54 "<invoke name=\""+name+"\" returntype=\"javascript\">" + 55 __flash__argumentsToXML(arguments,0) + "</invoke>")); 56 } 57 } 58 function __flash__removeCallback(instance, name) { 59 instance[name] = null;//调试时定位到这里 60 }
解决的方法:为Object标签添加id属性。
问题二
在IE6中将嵌入Flash的Object标签放到from标签中会报告未定义错误。这个问题我没有在IE7和Firefox中测试过。
解决的方法:将Object标签移到from外面。
如果有那位朋友遇到相同的问题欢迎找我讨论!

