JavaScript must be enabled in order for you to view this page. However, it seems JavaScript is either disabled or not supported by your browser. To view this page, enable JavaScript by changing your browser options, then Try again! .

在IE下嵌入Flash的两个怪异的问题

by solo L2008-04-12T21:20:00Z,tag:Web Design

问题一

在IE6和IE7中让Flash和JavaScript交互同时不为Object指定id属性(我这里也没有name属性,有name属性的情况我没有测试,可能会没有问题),这时离开当前页面或关闭IE会报告如下的运行时错误:

Flash HTML Object

调试时出现:

  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外面。

如果有那位朋友遇到相同的问题欢迎找我讨论!

Copyright © SoloL.org 冀ICP备06003230号