Actionscript: ExternalInterface.addCallback не работает в IE - PullRequest
1 голос
/ 09 февраля 2011

Html:

<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="100%" height="100%" id="testqwe">
    <param name="movie" value="http://www.mydomain.com/swf/testqwe.swf" />
    <param name="bgcolor" value="#ffffff" />
    <param name="allowScriptAccess" value="always" />
    <embed name="testqwe" src="http://www.mydomain.com/swf/testqwe.swf" width="100%" height="100%" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
</object>

Javascript:

try {
    if(navigator.userAgent.indexOf('MSIE') != '-1') {
        var embed = jQuery('#testqwe')[0];
    }
    else {
        var embed = jQuery('#testqwe embed')[0];
    }
}
catch(e)
{
    log({error:e});
}

Actionscript:

private function jsAPI():void{
    ExternalInterface.addCallback("callfromjs",callfromjs);
}
private function callfromjs(js:Object):void{
 //code here
}

Когда я пытаюсь вызвать embed.callfromjs (), он говорит, что Object не поддерживает это свойство или метод.

Что я делаю не так? Я думаю, что проблема в html-разметке. Возможно, что-то отсутствует, или я где-то допустил ошибку.

Он работает в Firefox / Chrome / Opera, но не во всех IE.

Помощь! Потратил около 4-5 часов и ничего ...

Ответы [ 5 ]

2 голосов
/ 25 февраля 2011

Я использую jquery, поэтому я использую плагины, потому что они значительно проще.

Мне пришлось переключиться с плагина jquery.flash на плагин jquery.SWFObject.потому что плагин jquery.flash не работает вообще и выдает ту же ошибку при обновлении или переходе от страницы.

Теперь я использую плагин SWFObject jquery и изменил внутренний обратный вызовназвание от "стоп" (зарезервированное слово), чтобы "убить", и все стало работать нормально.Кажется, это решило проблемы.

Кажется, что Firefox работает нормально и перезаписывает функцию, IE сломался (неудивительно).

IE дал мне следующую ошибку: «Объект нене поддерживает это свойство или метод "строка 48 char 3

Я написал Люку (автору) о проблеме с плагином jquery.flash.Я думаю, что он не использует обе оболочки, которые могут быть причиной сбоя, не знаю точно.IE FAIL.

Между прочим, когда я использовал плагин jquery.flash, IE выдавал мне ту же ошибку, когда я уходил со страницы.

«Объект не поддерживает это свойство или метод», строка 53, символ 3.

примечание: тонкая разница между плагинами: один использует «src», а другой - «swf» для объявления пути SWF.

Надеюсь, это полезно.

2 голосов
/ 09 февраля 2011

Попробуйте добавить атрибут id к вашему тегу вставки и атрибут name к тегу вашего объекта.У меня была эта проблема раньше, и мне кажется, что исправление было что-то вроде этого.

0 голосов
/ 19 февраля 2012

Я хочу добавить к посту Shanimal выше: мы обнаружили, что в IE8, в частности, есть несколько ключевых слов, которые нельзя добавить через ExternalInterface.addCallback flash.Добавление этих ключевых слов приведет к ошибке

"Объект не поддерживает это свойство или метод JScript - блок сценария, строка 48, символ 3"

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

Список ключевых слов, определенных на данный момент: stop, zoom, pan.

IE9 и другие браузеры выглядят нормально.Если вы получаете эту ошибку, попробуйте переименовать ваши обратные вызовы.Разве IE8 не прекрасна?; -)

0 голосов
/ 10 февраля 2011

Вы убедились, что правильный блок в if вызывается из IE?

Вы пытались использовать SWFObject для загрузки SWF? Конечно, я всегда использую динамический метод, чтобы добавлять вещи на страницу. Это избавит от необходимости анализировать браузер. SWFObject также имеет API , и есть вызов, чтобы получить флэш-приложение по id, если вам действительно нужно использовать статическую публикацию.

Кстати, хотя это и устарело, взгляните на jQuery.browser вместо того, чтобы анализировать строку UA самостоятельно. SWFObject API также имеет анализатор UA и некоторые флаги, которые вы можете использовать.

0 голосов
/ 09 февраля 2011

Попробуйте это:

var getFlash = function(name) {
       if (navigator.appName.indexOf("Microsoft") != -1) {
           return window[name];
       } else {
           return document[name];
       }
    };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...