Flash&js&other互调用
在IE浏览器下,将flash对象放在form标签之间,ExternalInterface class就会给你报javascript错,而firefox下完全正常
有人提出这样的解决办法,将下面这段javascript放在html里的flash之前:
有人提出这样的解决办法,将下面这段javascript放在html里的flash之前:
-
<script type="text/javascript">
-
function ExternalInterfaceManager()
-
{
-
this.registerMovie = function(movieName) {
-
if(!window.fakeMovies) window.fakeMovies = new Array();
-
window.fakeMovies[window.fakeMovies.length] = movieName;
-
}
-
this.initialize = function() {
-
if(document.all)
-
{
-
if(window.fakeMovies)
-
{
-
for(i=0;i<window.fakeMovies.length;i++)
-
{
-
window[window.fakeMovies[i]] = new Object();
-
}
-
window.onload = initializeExternalInterface;
-
}
-
}
-
-
}
-
}
-
function initializeExternalInterface() {
-
for(i=0;i<window.fakeMovies.length;i++) {
-
var movieName = window.fakeMovies[i];
-
var fakeMovie = window[movieName];
-
var realMovie = document.getElementById(movieName);
-
-
for(var method in fakeMovie) {
-
alert(arguments);
-
realMovie[method] = function() {flashFunction = "<invoke name=\"" + method.toString() + "\" returntype=\"javascript\">" + __flash__argumentsToXML(arguments, 0) + "</invoke>";this.CallFunction(flashFunction);}
-
}
-
-
window[movieName] = realMovie;
-
}
-
}
-
var eim = new ExternalInterfaceManager();
-
eim.registerMovie("ShockwaveFlash1");
-
eim.registerMovie("ShockwaveFlash2");
-
eim.initialize();
-
</script>
下面是浏览器载入一个包含ExternalInterface调用的flash之后,flash player可能会用到的方法
-
function __flash__arrayToXML(obj) {
-
var s = "<array>";
-
for (var i=0; i<obj.length; i++) {
-
s += "<property id=\"" + i + "\">" + __flash__toXML(obj[i]) + "</property>";
-
}
-
return s+"</array>";
-
}
-
function __flash__argumentsToXML(obj,index) {
-
var s = "<arguments>";
-
for (var i=index; i<obj.length; i++) {
-
s += __flash__toXML(obj[i]);
-
}
-
return s+"</arguments>";
-
}
-
function __flash__objectToXML(obj) {
-
var s = "<object>";
-
for (var prop in obj) {
-
s += "<property id=\"" + prop + "\">" + __flash__toXML(obj[prop]) + "</property>";
-
}
-
return s+"</object>";
-
}
-
function __flash__escapeXML(s) {
-
return s.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """).replace(/'/g, "'");
-
}
-
function __flash__toXML(value) {
-
var type = typeof(value);
-
if (type == "string") {
-
return "<string>" + __flash__escapeXML(value) + "</string>";
-
} else if (type == "undefined") {
-
return "<undefined/>";
-
} else if (type == "number") {
-
return "<number>" + value + "</number>";
-
}
-