2013-02-23 1 views
0

Я просмотрел каждый ресурс, который мог найти, чтобы создать обтекаемый способ сделать это, но каждый раз, когда я пытаюсь, я получаю одну из основных ошибок. Я просто не могу заставить его работать!Запустить функцию флэш-объектов, встроенную в swfobject's embedSWF?

Вот мой флэш-тест ActionScript от первого ключевого кадра моего фильма:

import flash.external.*; //THIS... 

System.security.allowDomain("http://localhost", "*"); //...AND THIS ALSO REQUIRED! 

if (ExternalInterface.available) { 
    trace("ExternalInterface= " + ExternalInterface.available); 
    flash.external.ExternalInterface.addCallback("myExternalMethod", null, myFunction); 
} 

function myFunction() { 
    gotoAndStop(2); 
} 

А вот мой JavaScript/немного JQuery:

<script type="text/javascript"> 
    var flashvars = {}; 
    var params = { 
     wmode: "transparent", 
     allowscriptaccess: "always" 
    }; 

    var attributes = { //The addition of these attributes make it work! 
     id: "number-input", 
     name: "number-input" 
    }; 

    var embedHandler = function (e){ 
     mySWF = e.ref; 
    }; 

    swfobject.embedSWF("images/flash-form.swf", "number-input", "800", "320", "9.0.0", "expressInstall.swf", flashvars, params, attributes, embedHandler); 

    function executeFlash() { 
     getObjectById("number-input").myExternalMethod(); 
    } 

    function getObjectById(objectIdStr) { 
     var r = null; 
     var o = document.getElementById(objectIdStr); 
     if (o && o.nodeName == "OBJECT") { 
      if (typeof o.SetVariable != undefined) { 
       r = o; 
      } else { 
       var n = o.getElementsByTagName(OBJECT)[0]; 
       if (n) { 
        r = n; 
       } 
      } 
     } 
     return r; 
    } 

    $(function() { 
     $('#main-button-big').click(function(event){ 
      event.preventDefault(); 
      executeFlash(); 
     }); 

    }); 
</script> 

Вспышка, кажется, успешно внедрить, если я сделаю что-то глупое как ...

$(mySWF).hide(); 

... он скрывается, поэтому я уверен, что скрипт t может видеть объект. не

Независимо от того, какие методы я пытался сделать, я всегда (тестирование в светлячок) получаю сообщение об ошибке, как:

Ошибка: Ошибка типа: mySWF.myExternalMethod не является функцией.

В сафари:

TypeError: 'не определено' не является функцией (оценка 'mySWF.myExternalMethod()')

Если я пытаюсь версию JQuery из getElementById (обогнуть embedHandler) я получаю:

Ошибка: TypeError: $ (...). MyExternalMethod не является функцией. или TypeError: «undefined» не является функцией (оценка «$ ('# number-plate-input»). myExternalMethod()')

Мне нужно, чтобы этот проект был завершен быстро и я в конце моего троса , Любая помощь будет очень благодарна.

ОБНОВЛЕНО: Обратите внимание, что embedHandler больше не нужен и не используется для запуска каких-либо событий. Это полезный кусок кода, хотя, так что я решил оставить его в

+0

Я тестирую на своем сервере Apache Macs. не просматривая страницу через файловую систему, я также установил корень папок apache как надежное место в настройках глобальной безопасности Flash. – adamg2000

+0

Вы действительно вызываете метод на фактическом экземпляре Flash Player, а не, например, на элемент, содержащий Flash? Другими словами, можете ли вы подтвердить, что mySWF ссылается на правильную вещь, когда вы вызываете mySWF.myExternalMethod()? –

ответ

1

Изменения attributes переменные в вашей JavaScript из пустого объекта:.

var attributes = { 
    id: "flash_movie", 
    name: "flash_movie" 
}; 

И тогда вы должны быть в состоянии вызовите выставленную функцию, используя:

document.getElementById("flash_movie").myExternalMethod(); 
+0

Я добавил этот код, переименовав id/name соответствующим образом, и теперь он отлично работает, спасибо @danni! Ты звезда! – adamg2000

+0

добро пожаловать! рад помочь – danii