Как я могу преодолеть «Ошибка вызова метода на NPObject» и Play () SWF? - PullRequest
2 голосов
/ 10 апреля 2011

Я работаю над системой викторины. Обычно он использует изображения 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, чтобы эти файлы работали правильно?

Ответы [ 5 ]

4 голосов
/ 24 апреля 2011

Kirkman14,

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

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

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

2 голосов
/ 20 апреля 2011

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

1 голос
/ 10 апреля 2011

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

0 голосов
/ 12 июля 2013

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

0 голосов
/ 21 января 2012

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

...