Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   ExternalInterface - Ошибка в Help'e к Flash 8? (http://www.flasher.ru/forum/showthread.php?t=99724)

Vitowd 12.08.2007 05:48

ExternalInterface - Ошибка в Help'e к Flash 8?
 
Вызов из Флеш внешних функций и вызов функций Флеша извне.

1. Макромедия предоставила готовые файлы примера работы ExternalInterface.
2. Файлы примера находятся в каталоге: Program Files\MacroMedia\Flash 8\Samples and Tutorials\Samples\ActionScript\ExternalAPI\
3. Пример не работает.
4. Ошибка в коде примера, глюк AS, JS или .... ?
5. Линки, правда, у себя изменил на локальные.
6. Например, в локалке, если "коротнуть" в AS Флеша метод playVideo(sobaka.flv), то работает, т.е. видео организовано и боеготово.
7. Чего только не лопатил и HTML и JS...
8. Узнать бы, где "собака порылась".
9. Для тех, кто не хочет открывать папку с примером:

Флеш ролик состоит из 2-х слоёв:
В 1-м содержится только AS.
Во 2-м находится объект типа Video (ActionScript-controlled) с именем-идентификатором "selectedVid".

Можно загрузить исходник примера от макромедии

screamge 12.08.2007 09:06

Что значит пример не работает? Флеш вызывает метода JS, из HTML'a вызываются метода во флеш, что там не работает?

З.Ы. Оформите код, а то придут модераторы ругаться будут :)

etc 12.08.2007 12:29

Vitowd, отредактируйте свой пост и оформите код тегами [code][/code]. А лучше такую простыню прикреплять в виде архива с html и fla, дабы не заставлять форумчан собирать исходник для теста.

Vitowd 12.08.2007 18:49

Пояснения.
 
1.Уважаемому screamge.
Не работает - означает, что не загружается внешниее видео во флеш, как подразумевелось авторами примера т.е. Macromedia inc. Поскольку, как я предполагаю, не происходит(не выполняется или не доходит до "адресата") обращения JS к AS.

2. Уважаемому __etc:
2.1. Я впервые здесь. Что видно из раздела форума. Спасибо за замечания! Учту, постараюсь отредактировать и разобраться в вопросах оформления.
2.2 Собирать исходник для теста нет необходимости, поскольку он стандартный Sample в стандартной поставке Flash 8. Место, Где находятся ВСЕ готовые к употреблению файлы я указал в п.2 своего вопроса-обращения. Для тех, у кого не установлен Flash 8 подготовлю архив.

Vitowd 12.08.2007 20:08

Уточнение.
 
Вложений: 1
1. Объяснять, как должен работать приведенный код нет необходимости. Я поместил достаточно комментариев к коду на русском языке, объясняющих этот алгоритм.

2. В форуме на тему об "ExternalInterface" часто упоминалась не корректная работа с IE. Сама же Macromedia в файле к тесту readme.txt предупреждает, что для выполнения этого примера достаточно броузера IE5.

3. Проблема: Не устанавливается взаимосвязь между JS и AS.
3.1. Внешнее проявление - локальный FLV видеофайл во флеш не подгружается.
3.2 Не получается вызвать ни alert() в JS, ни trace() в AS.

4. Поскольку, я нашёл всего лишь один ("имхо" или по моему л. мнению, не принципиальный) изъян в коде JS. И, пока что, не вижу порочности алгоритма примера, то повторю вопрос:

Ошибка в коде примера, глюк AS, JS или .... ?

5. Сам исходник от ММ прикреплён архивом "external_sample.rar" Вложение 1. Локальный видео файл, я думаю, у каждого найдётся свой.

etc 12.08.2007 23:32

Vitowd, что я не вижу вашего «учту». Первый пост до сих пор без оформленного кода. На этом форуме можно редактировать свои сообщения. Так что, будьте добры, оформите код. У нас с этим строго и лишние плюсы вам ни к чему.

Kikasso 13.08.2007 02:29

Цитата:

Сообщение от Vitowd
3.2 Не получается вызвать ни alert() в JS

Код:

import flash.external.*;
onMouseDown = function(){
ExternalInterface.call('alert', 'hello');
}

Проблема с исходником от ММ одна - он в Опере не работает, потому что опера притворяется ие. Лечится просто.
Код:


var OPERA = Boolean(window["opera"]);
var IE = !OPERA && navigator.appName.indexOf("Microsoft") != -1;
flashVideoPlayer = (IE) ? window['videoPlayer'] : document['videoPlayer'];

Чтобы избежать возни с нахождением флешки, можно заюзать SFWObject, тогда флешка находится универсальным document.getElementById
Ну а тот пример у меня работает во всех броузерах.

Vitowd 16.08.2007 05:46

Для уважаемого __etc:
Кажется, милостивейший государь, вы должны быть удовлетворены. Ну, хотя бы, в первом приближении. Ещё раз раз извиняюсь за моё нулевое.

Теперь по поводу Флеш:

Спасибо г-ну Kikasso!
Но у меня остаются вопросы:
1. Действительно ли загружается и видеофайл? И всё остальное также работает именно в этом наборе файлов примера?

2. Но, в JS (в исх. примере),есть шунт, который закорачивает обращения на собственную JS функцию, минуя AS. Хотя в AS специально предусмотрена для этого "videoNs.onStatus"
Код:

function callFlashPlayVideo() {
  var comboBox = document.forms['videoForm'].videos;
  var video = comboBox.options[comboBox.selectedIndex].value;
  updateStatus("____" + video + "____"); // непосредственный вызов нижеобъявленной JS функции
  flashVideoPlayer.playVideo("http://www.helpexamples.com/flash/video/" + video);
}

3. Даже замена в JS процедуре callFlashPlayVideo() вызова flashVideoPlayer.playVideo("...") на вызов с прямым обращением к объекту document.getElementById("videoPlayer").playVideo("..") ничего не дала. Т.е. видео не загружается.
3.1. В AS вставил вызов alert'a по клику мышки. как предлагали, JS Не отзывается.

4. Возможно дело в системе или в железе?
4.1 WinXP SP1 на Athlon XP 1700. Материнка с чипсетом nForce 2. Browser IE6. Всегда каталоги и имена файлов пишу только латиницей.

etc 16.08.2007 10:45

Мне кажется, что в html-коде не хватает параметра swLiveConnect со значением true.

Kikasso 16.08.2007 12:56

Вложений: 1
Вот алерт во вложении - неужели оно не работает?
Тот пример макромедийный, с учетом фикса для оперы (только я написал большими буквами, а там маленькие), работает без вопросов.
У меня был глюк в работе с видео, оно не хотело грузится командой js - убрал папку из "Рабочего Стола" и все заработало.
насчет LiveConnect - возможно, для младших версий оперы и мозиллы.

Vitowd 18.08.2007 09:39

REM:
Отсутствие оперативности моих ответов объясняется тем, что:
  • Машина, имеющая выход в и-нет и моя машина, на которой я работаю и где установлен MM Flash 8 разнесены в пространстве. Существенно.
  • Подключение к и-нет через Dial-Up. Так что, занимать телефонную линию в личных целях могу только лишь в ночное время.
Посему чаю покорно, милостивейшие государи, некоторого снисхождения ко мне из-за не своевременного выхода на связь.

Уважаемому господину Kikasso:
Настоящим докладываю, что:
  1. Предоставленные Вами файлы были установлены и проверены на 2-х машинах (с OS WinXP Pro SP1 из одного пакета инсталляции).
  2. Окно IE6 выглядит в соответствии с HTML параметрами. Фон страницы "т/серый", бакграунд объекта "св./серый".
  3. Коричневого бакграунда SWF не наблюдается. Объекту параметр "wmode" не назначен.
  4. При "кликании" мышью на объкте страницы ничего не происходит, т.е. окно JS сообщения не всплывает.

Уважаемому г-ну __etc:
  1. Касательно Sample от MM. Добавление в объект параметра <param name="swLiveConnect" value="true" /> (и swLiveConnect="true") не обеспечило взаимосвязи As и JS. Видео не загружается.
    Мой видеофайл *.flv лежит вместе с файлами *.html и *.swf в одной и той же папке. Все названия папок и файлов написаны латиницей.
  2. Касательно примера г-на Kikasso "Вызов окна "alert". Добавление параметра "swLiveConnect", к сожалению, не обеспечивает вызов JS-команды "alert()" также и в этом примере.

Предварительный вывод:
Поскольку
  1. стандартный пример работы ExternalInterface от MMedia inc. не вызывает никаких затруднений у двух весьма почтенных джентельменов и иных пользоватей MM Flash 8;
  2. ситуация с програмным решением моей (а может, и не только) проблемы зашла в тупик;
  3. Примеры и от Macromedia, и от ув. г-на Kikasso не работают на 2-х разных компьютерах с одинаковой ОС;
  4. не смею даже сомневаться, что файлы, любезно предоставленные г-ном Kikasso могут не работь "в любых погодных условиях",
, то исходя из выше-изложенного, могу предположить, что для успешного функционирования ExternalInterface необходимы некоторые насторойки либо IE6, либо OS (в дан.сл. WinXP). Возможно (?), на известных мне конкр. машинах что-то отличается от дефолта (весьма не уверен в этом).

Вопросы:
  1. Насколько оправдано моё предположение о причине отказа Flash?
  2. Известны ли кому насторойки WinXP, влияющие на работу ExternalInterface?

P.S.
Есть ещё дополнительные непонятности.
Например, несмотря на настойчивые рекомендации MM использовать формат UTF-8 для внешних текстовых файлов, хранящих переменные для процедур loadVariables() и loadVars(), такие тексты у меня вызывают сообщения об ошибке доступа к файлу. В то время, как формат ANSI или даже 866-я досовская кодировка читаются флешем великолепно.
Нет ли здесь, не взыщите, связи с проблемой отсутствия на моей машине сервиса ExternalInterface?

У Гремлинов, знамо, шуточки для куражу бывают разные. Ежели сиё гремлины, то ....?? %-)
".. чего не ведомо земным мудрецам, мой друг Горацио."

etc 18.08.2007 11:46

А какая версия плеера установлена в браузере?

Vitowd 19.08.2007 05:14

При инсталляции MM Flash 8 был сделан апгрейд SWF плеера в IE6 до версии 8. О чём свидетельствует правый клик мыши на мувиках в браузере. До того момента была версия 6.

etc 19.08.2007 17:44

Ммммм, все это очень странно, я не сталкивался с такой проблемой отказа работы ExternalInterface.

Molecula 19.08.2007 18:22

У меня когда-то, тоже ничего не работало...как только в инет залил - чудом заработало.
С виндой и настройком ИЕ не связан Экстернал (ну, понятно Ява должен быть включен).
Ищите ошибку, видать мелочь-мелочевая.

Kikasso 19.08.2007 19:12

Может, в "службах" что-то отрублено.

Vitowd 20.08.2007 09:02

Вот ещё такая непонятка происходит.
Можно сказать, товарищи, нарушение конституционных прав локальных переменных. Пролетариев, так сказать, абс-т'акт-н-ого т'уда.

Этот код не желает объявлять переменные:
Код:

var moviUrl:String = "Pics/konti1.swf"; //СТАНДАРТНОЕ опр-е
var moviCount:Number = 10;
trace(moviUrl)  //undefined
trace(moviCount) //undefined

А этот код согласен на компромисс:
Код:

var moviUrl = "Pics/konti1.swf"; //опр-е без указ. типа
var moviCount = 10;
trace(moviUrl)  //Pics/konti1.swf
trace(moviCount) //10

"- .. либо ты вийдэш женой товарища Саах ...какого человека..
- .. или она ведёт меня к прокурору"


Как сказал король в старинном ч/б фильме "Золушка": - ".. Всё! Ухожу в монастырь." Так и я - Всё! Перехожу на Flash 5. ;-)

P.S.
Уважаемый г-нъ __etc!
На ваше усмотрение - целесообразно ли этот вопрос вынести новой темой раздела? В качестве всеобщего ликбеза?
Я имею в виду, несомненно, вопрос о переменных, а не Flash 5.

etc 20.08.2007 09:44

Лучше задать этот вопрос в новой теме.

this.create 20.08.2007 09:51

Цитата:

Сообщение от Vitowd
Этот код не желает объявлять переменные:
Код:

var moviUrl:String = "Pics/konti1.swf"; //СТАНДАРТНОЕ опр-е
var moviCount:Number = 10;
trace(moviUrl)  //undefined
trace(moviCount) //undefined


В настройках публикации установлен flash player 5. Или плеер 6,7,8 но as1.

Vitowd 21.08.2007 09:29

Да. Не за зря же я упомянул Flash5.
Дело втом, что копаюсь во всяких настройках, пробую разные варианты, чтобы пробиться к сервису ExternalInterface. Результата нет, увы.

P.S.
На второй машине, на к-рой не работает ExternalInterface. Стоит 9-й плейер в IE6 и в статусе выдаётся "Ошибка на странице". В то время, как на моей с 8-м плейером в IE6 (без и-нета) - "готово" с тем же результатом. Выполнение JS в браузерах разрешено.


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

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