是)我有的:
在 swf 中导出函数的示例:
flash.external.ExternalInterface.addCallback("isActive", ...
创建嵌入对象的示例:
var b = document.createElement('embed');
b.type = 'application\u002fx-shockwave-flash';
b.setAttribute('allowFullScreen', 'true');
b.setAttribute('allowNetworking', 'all');
b.setAttribute('allowScriptAccess', 'always');
b.width = 500;
b.height = 400;
b.src = 'assets\u002fUltra4.UltraApplication\u002fUltra4.UltraApplication+UltraSprite.swf';
javascript调用flash外部接口(interface)示例:
try
{
e = b.isActive();
}
catch (__exc){ }
在 IE 中,它将捕获消息 “对象不支持此属性或方法”
如何解决?
在脚本调试器中,我可以看到应该是桥的第三方脚本:
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>";
} else if (value == null) {
return "<null/>";
} else if (type == "boolean") {
return value ? "<true/>" : "<false/>";
} else if (value instanceof Date) {
return "<date>" + value.getTime() + "</date>";
} else if (value instanceof Array) {
return __flash__arrayToXML(value);
} else if (type == "object") {
return __flash__objectToXML(value);
} else {
return "<null/>"; //???
}
}
function __flash__addCallback(instance, name) {
instance[name] = function () {
return eval(instance.CallFunction("<invoke name=\""+name+"\" returntype=\"javascript\">" + __flash__argumentsToXML(arguments,0) + "</invoke>"));
}
}
function __flash__removeCallback(instance, name) {
instance[name] = null;
}
请您参考如下方法:
我不确定我是否正确理解了您的问题。但我认为你错过了几件事:
1)您的嵌入标签需要一个名称属性。让我们将其命名为“NewFlashMovie”,用于后续代码:
b.name = "NewFlashMovie";
2) 您需要使用外部函数以不同方式调用“isActive”函数。首先添加这个功能
function thisMovie(movieName) {
if (navigator.appName.indexOf("Microsoft") != -1) {
return window[movieName];
} else {
return document[movieName];
}
}
然后你可以像这样调用函数
thisMovie("NewFlashMovie").isActive();
根据我的经验,这个“thisMovie”对于连接 IE-Flash 调用至关重要。这也记录在 ExternalInterface documentation
3) 我也推荐使用 swfobject而不是创建自己的“嵌入”对象。
希望这些有所帮助。