Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   В Internet Explorer не работает ExternalInterface (http://www.flasher.ru/forum/showthread.php?t=131139)

kirea 13.10.2009 19:52

В Internet Explorer не работает ExternalInterface
 
у меня имеются такие фрагменты кода:
Код AS3:

if (ExternalInterface.available) {
        var href:String = ExternalInterface.call("window.location.href.toString");
        if (href != null) {
                var variablesInd:int = href.lastIndexOf("?");
                variables = (variablesInd >= 0) ? href.substr(variablesInd + 1).split("&") : null;
        }
}

и в другом месте:
Код AS3:

if (ExternalInterface.available) ExternalInterface.call("showRegions");

,
где showRegions - функция JS, определенная в подключаемом к ХТМЛю файле scripts.js .

Так вот: оба фрагмента кода прекрасно работают в FF, Opera, Chrome, но АБСОЛЮТНО не работают во всех версиях IE (вернее не работают только фрагменты с ExternalInterface, все остальное чувствует себя классно). Прилагаю код размещения ролика на странице:
PHP код:

<div id="LMenu" class="mainMenuAbs">
<
script type="text/javascript">

AC_FL_RunContent'codebase','http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,28,0','width','200','height','540','src','flashes/mainMenu','quality','high','pluginspage','http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash','scale','exactfit','wmode','transparent','movie','flashes/mainMenu' ); //end AC code
</script>

<noscript>
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,28,0" width="200" height="540">
    <param name="movie" value="flashes/mainMenu.swf" />
    <param name="quality" value="high" />
    <param name="wmode" value="transparent">
    <param name="SCALE" value="exactfit" />
    <embed src="flashes/mainMenu.swf" quality="high" pluginspage="http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash" type="application/x-shockwave-flash" width="200" height="540" scale="exactfit" wmode="transparent"></embed>
</object>
</noscript>
</div> 

Я было подумал, что дело в SWFObject (как часто писали здесь на форуме). попробовал убрать фрагмент вставки флешки <script>....</script>, оставив только <object.......>...</object>. Как и следовало ожидать, перестал мувик автоматом активироваться в Опере, но при этом в Эксплорере всё-равно ExternalInterface не заработал.
Может сможете кто-нибуть помочь в этом? заранее спасибо!

Felicast 13.10.2009 21:32

ну вообще dom у ie отличается от ff и opera. так что возможно какого-то из элементов window.location.href.toString может и нет (точно не могу сказать)/ проверить можно легко: сравнивать каждый элемент с null
и вообще, не должно ли быть
Код:

window.location.href.toString();

wvxvw 13.10.2009 21:45

document.location

kirea 13.10.2009 23:56

Цитата:

Сообщение от Felicast (Сообщение 857544)
и вообще, не должно ли быть
Код:

window.location.href.toString();

ну при вызове js-функций без параметров вроде бы скобки () ставить не надо -- во всяком случае без них всегда работало.

И все дружно на форуме к сожалению НЕ заметили, что проблема вообще не в корректности строки window.location.href.toString(). :(((
Ведь не работает также вызов js-функции showRegions(), хотя из других браузеров вызывается.
Код AS3:

if (ExternalInterface.available) ExternalInterface.call("showRegions");

то есть вообще никакие вызовы js через ExternalInterface не срабатывают в IE

incoob 14.10.2009 02:03

Может у вас на компьюетере просто ие сломался? :) Или версия плеера в нем некошерная.

А вообще, проще всего работоспособность яваскрипта каким-нибудь алертом проверять:
Код AS3:

ExternalInterface.call("alert()")


kirea 14.10.2009 08:52

Цитата:

Сообщение от incoob (Сообщение 857629)
Может у вас на компьюетере просто ие сломался? :) Или версия плеера в нем некошерная.
А вообще, проще всего работоспособность яваскрипта каким-нибудь алертом проверять:
Код AS3:

ExternalInterface.call("alert()")


проверял на трех разных машинах!!!! с разными операционками и версиями IE. Насчет алерта не катит. Как я написал выше: до вызова js-функций в IE дело вообще не доходит. :(

Felicast 14.10.2009 10:46

Цитата:

ну при вызове js-функций без параметров вроде бы скобки () ставить не надо -- во всяком случае без них всегда работало.
ну как минимум использование скобок - это хороший тон. и повышает читаемость

kirea 14.10.2009 12:20

попробовал уже и со скобками () и без.... в ИЕ никак не работает.
но самый прикол заключается в том, что ExternalInterface.available стабильно выдает true (по идее уже всё должно работать), но тем не менее js-функции не вызывает (((

wvxvw 14.10.2009 14:00

Добавить в HTML allowAccess="always".
И вообще, установите дебаг плеер, я не представляю, как вообще можно что-то разрабатывать на AS не пользуясь дебаг плеером...

kackbip 14.10.2009 14:22

Помимо allowAccess в хелпе еще советую определять allowDomain, если происходит securityError, но происходит ли эта ошибка можно узнать поставив дебажный проигрыватель


Часовой пояс GMT +4, время: 12:37.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.