РЕШЕНИЕ: Я должен был добавить более подробную информацию. Несмотря на то, что внешний интерфейс был настроен, объекты NetConnection/NetStream не были подключены к серверу. В результате я не мог звонить. Очень важная деталь, которую я забыл, извинения.Передача JS при внешнем внешнем интерфейсе AS
Я знаю, что правильно иметь Flash-вызов JavaScript, когда внешний интерфейс готов, поэтому я делаю вызов. Метод JS вызван правильно, но я не могу выполнить успешный вызов обратно в файл Flash. Я должен вручную установить 1-секундный тайм-аут, чтобы заставить его работать, и я не понимаю, почему. Если внешний интерфейс готов, я должен сразу же перезвонить Flash, да?
Кстати, я использую SWFObject.embedSWF()
, чтобы разместить файл Flash на странице. Я дал файлу атрибуты id и name.
Вот мой флэш-код:
private function init():void // onCreationComplete handler
{
this.setupExternalInterface();
}
private function setupExternalInterface():void
{
if (ExternalInterface.available)
{
ExternalInterface.call("swfIsReady");
ExternalInterface.addCallback("call", makeACall);
}
}
А вот страница JSP:
function swfIsReady(){
setTimeout(flexCall,1000);
}
function flexCall(){
var theApp = getFlexApp(attributes.name);
theApp.call();
}
function getFlexApp(appName)
{
if (navigator.appName.indexOf ("Microsoft") !=-1)
{
return window[appName];
}
else
{
return document[appName];
}
}
Это единственный способ, которым это работает. Я думал, что могу просто удалить таймаут и сразу вызвать flexCall().
Что произойдет, если вы переверните две строки, где вы выполняете 'ExternalInterface.call()' и 'ExternalInterface.addCallback()'. Сначала добавьте обратный вызов, затем скажите Javascript, что внешний интерфейс готов ... это может не помочь, просто вслух ... –
К сожалению, это не сработало. Но спасибо. – fumeng