Как я могу преодолеть ошибку вызова метода для NPObject и Play () SWF?

Я работаю над системой викторин. Обычно для каждого вопроса используются изображения jpeg. Но в некоторых викторинах вместо этого используются анимированные файлы .SWF. Я хочу использовать jquery swfobject для вызова метода play () после того, как пользователь нажал на ответ.

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

HTML-код викторины находится на сайте www.somedomain.com, а файлы SWF - на images.somedomain.com. Итак, я предполагаю, что это междоменная вещь.

Проблема для меня в том, что я ничего не знаю о Flash ... как редактировать SWF-файлы, что-нибудь об атрибутах Flash и т.п.

Вот пример моего кода:

<div class="photos">
    <object data="http://images.somedomain.com/q1tattooquiz.swf" type="application/x-shockwave-flash" width="600" height="350">
        <param name="movie" value="http://images.somedomain.com/q1tattooquiz.swf">
        <param name="wmode" value="opaque">
    </object>
</div>

И javascript:

if (hasFlash) {
    $('#question'+quesNum+' .photos').flash(function() { this.Play(); } );
    }

Это довольно просто и, как я уже сказал, отлично работает на моем ПК. Но после загрузки он выдает ошибку.

Что я могу добавить в свой javascript, чтобы эти файлы работали правильно?


person Kirkman14    schedule 09.04.2011    source источник
comment
Как бы то ни было, я установил FlashBug, чтобы посмотреть, может ли он помочь, но я не получаю никаких предупреждений или ошибок. Только метод вызова ошибки для NPObject »на обычной консоли.   -  person Kirkman14    schedule 10.04.2011
comment
Хорошо, я думаю, что в значительной степени определил, что это проблема междоменного доступа. Когда SWF-файлы находятся в том же домене, что и HTML, все в порядке. Таким образом, остается вопрос: если не переделывать SWF-файлы для добавления кода безопасности (чего я не могу сделать), есть ли какое-нибудь другое решение, чтобы заставить их играть?   -  person Kirkman14    schedule 11.04.2011


Ответы (5)


Киркман14,

Помимо функции allowScriptAccess, убедитесь, что вы вызываете функции с правильным количеством параметров, соответствующим объявлению AS. Если ваша AS заявляет:

function playSound(event:MouseEvent):void{
// code here
}

затем убедитесь, что вы используете эту функцию соответственно playSound(null). Я сам через это прошел.

person user776686    schedule 24.04.2011
comment
Однако есть загвоздка. У меня нет доступа к исходным файлам Flash, поэтому я не знаю, что находится в AS. - person Kirkman14; 02.05.2011

Я думаю, что нет способа избежать изменения SWF. Вам нужно поместить эту строку во Flash: flash.System.Security.allowDomain('*'); Это нужно только в том случае, если вы пытаетесь вызвать функцию в SWF из JS. Для противоположного направления также установите для параметра allowScriptAccess значение always во встроенном коде. Обратите внимание, что этот параметр может быть чувствительным к регистру, если я правильно помню.

person pixelfreak    schedule 19.04.2011

Вы можете попробовать установить для allowscriptaccess значение «always». allowscriptaccess - это тот же параметр, что и wmode в вашем примере кода.

person Lars Blåsjö    schedule 09.04.2011
comment
Итак, ‹имя параметра = значение allowscriptaccess = всегда›,? - person Kirkman14; 10.04.2011
comment
Я попробовал, но, похоже, это не имело никакого значения. :( - person Kirkman14; 10.04.2011
comment
для моих экспериментов Chrome с manifest v2, фоновой страницей и NPAPI это было решение. Спасибо. - person kagali-san; 24.02.2013

Мне было предложено создать файлы crossdomain.xml, которые будут заносить в белый список домены, с которыми будет взаимодействовать flash. Однако у меня еще не было никаких успехов в этом (но, возможно, моя проблема отличается от вашей).

person B T    schedule 21.01.2012

Для меня эта проблема возникла из-за того, что в Flex я бы установил статическую функцию, которая выполняла вызовы ExternalInterface. Если проблемная функция статическая, попробуйте отменить ее.

person Amalgovinus    schedule 12.07.2013