Возникли проблемы с Flash, Javascript и JQuery - PullRequest
1 голос
/ 16 марта 2010

Я использую JQuery с плагином jQuery flash и пытаюсь отправить вызов JS обратно на флэш, я продолжаю сталкиваться с «xxx не является функцией», так что, очевидно, что-то не так. Я новичок в JQuery и очень плохо знаком с этим плагином jquery flash и просто не могу понять, что я делаю неправильно.

Вот где я подгоняю вспышку:

<div id="tagimgback">
<script language="javascript">
$(document).ready(function(){
$('#tagflash').flash(
    {
      src: 'tagflash',
      width: 200,
      height: 200,
      flashvars: {theYear:'2010',theTagNumber:'123'}
    },
    { version: 8 }
);

});
</script>
</div>

И вот где я пытаюсь это назвать:

$("#tagflash").gotoNewFrame(theTagNumber);

gotoNewFrame - это функция AS в моей вспышке. Я знаю, что эта функция работает, так как я смог протестировать ее до того, как внедрил jQuery.

Ответы [ 3 ]

4 голосов
/ 16 марта 2010

$('#tagflash') возвращает набор объектов jQuery, а не ваш элемент.

Если вы хотите вызвать пользовательский метод для вашего объекта (вместо метода, поддерживаемого объектом jQuery), я думаю, что вам сначала нужно получить свой объект с помощью вызова объекта jQuery Get. Метод вот так:

var flashWrapper = $('#tagflash object');  // returns a jQuery object set
var flashObject = flashWrapper.get(0);     // should return your flash element object
flashObject.gotoNewFrame(theTagNumber);

Обратите внимание, что похоже, что плагин jQuery Flash внедряет тег Object в целевой div, поэтому вам действительно нужно использовать объект #tagflash в качестве селектора для доступа к объекту flash.

ОБНОВЛЕНИЕ: Убедитесь, что вы опубликовали метод с помощью вызова класса ExternalInterface в вашем сценарии действия:

ExternalInterface.addCallback("gotoNewFrame", callFromJavaScript);

Если все, что вы пытаетесь сделать, это вызвать метод при первой загрузке вашего флэш-фильма, почему бы не выполнить привязку к событию onLoad и вызвать gotoNewFrame в вашем сценарии действия? Вы только что передали tagNumber в качестве параметра, когда вызвали метод flash, поэтому значение уже доступно ..

0 голосов
/ 18 апреля 2011

У меня возникла та же проблема - запускать и получать события слушателя между javascript и flash.

Решением было использование файла AC_OETags.js из Adobe в качестве сценария для встраивания вместо JQuery flash.

Проблема, связанная с состоянием гонки, когда флэш-память создает обратные вызовы JavaScript в браузере. По какой-то причине это неправильно обрабатывается прямым вставлением.

<div>
<script>
// Major version of Flash required
var requiredMajorVersion = 10;
// Minor version of Flash required
var requiredMinorVersion = 0;

var hasRequestedVersion = DetectFlashVer(requiredMajorVersion, requiredMinorVersion, requiredRevision);
AC_FL_RunContent(
"src", "tagflash",
    "width", "200",
    "height", "200",
    "id", "myTagFlash",
    "quality", "high",
    "bgcolor", "#FFFFFF",
    "name", "myTagFlash",
    "allowScriptAccess","allways",
    "type", "application/x-shockwave-flash",
    "pluginspage", "http://www.adobe.com/go/getflashplayer",
    "flashvars", "templateData=theYear:2010&theTagNumber:123"
);
</script>
</div>

Тогда вы можете сделать: (работает в IE, FF, Safari, Crome, ++)

$("#tagFlash").gotoNewFrame();
0 голосов
/ 16 марта 2010

Предполагая, что #tagflash действительно существует (и вы не имеете в виду #tagimgback вместо этого), вы должны попробовать это.

document.getElementById("tagflash").gotoNewFrame(theTagNumber);

Здесь нет необходимости в jQuery. Поскольку $("#tagflash") возвращает объект jQuery (обертка вокруг элемента real dom), который является ненужным переносом, который стоит только;) cpu-time

...