Форум 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)
-   -   Проблемы в IE - ExternalInterface.call("eval", "2+2") (http://www.flasher.ru/forum/showthread.php?t=164366)

AzagThoth 16.08.2011 00:23

Проблемы в IE - ExternalInterface.call("eval", "2+2")
 
Здравствуйте. Заранее извиняюсь за не очень стройное название темы(действительно сложно красиво сформулировать данный вопрос). На днях узнал что есть такой удобный способ возвращать значения переменных и выражений из JS во флеш. А делается это так:
Код AS1/AS2:

test_tf.text = ExternalInterface.call("eval", "2+2");

В FF, Opera, всё отрабатывает отлично. И в текстовое поле выводится значение 4.
Но вот в IE почему то всегда null.
Первое что приходит в голову, IE не поддерживает такие ExternalInterface.call("eval" вызовы из флеша. Но если например сделать так:
Код AS1/AS2:

ExternalInterface.call("alert", "2+2");

То окошко с алертом выскакивает во всех браузерах. Что означает что ExternalInterface.call действительно отрабатывает и вызывает код JS. Кто в теме, пожалуйста помогите. Если не очень лень :)

mooncar 16.08.2011 00:34

1. Попробуйте просто без флеша под IE вывести этот eval и посмотрите, что получится.
2. Возможно в коде публикации (если она сделана стандартно, а не с помощью SWFObject) разрешены внешние скрипты в не-IE браузерах, а для IE не прописано.
3. Самое главное. Зачем оно вам?
ExternalInterface.call - отличный метод, постоянно применяю, только мне кажется, что можно как-то без eval обойтись.
Зачем вам делать вызов JS и производить вычисления в среде JavaScript, если есть ActronScript? Какая стоит задача?

AzagThoth 16.08.2011 00:38

Большое спасибо за ответ. Здесь задача получить URL из строки адреса браузера. И в FF и в Opera это замечательно работает.
Использую такой код:
Код AS1/AS2:

var urlReferrer = ExternalInterface.call("eval", "document.location.href.toString()");

Пример намеренно привёл простой что бы идея была понятна всем.

mooncar 16.08.2011 00:40

Код AS1/AS2:

var href = ExternalInterface.call('function testUrl () { return document.location.href }');

Если и тут null будет, то проблема у вас не в коде AS, а в публикации флеша.

AzagThoth 16.08.2011 00:49

Да действительно. Здесь тоже null в IE.
Делал так:
Код AS1/AS2:

test_tf.text = ExternalInterface.call('function testUrl () { return 4+2; }');

В FF, Opera выводит 6. А в IE null.
Сами eval в IE работают. Нашёл такую страничку для тестов - http://www.w3schools.com/jsref/jsref_eval.asp
А по настройкам публикации. Не знаю. Стандартные настройки. Ничего не менял. Код HTML написан от руки.
Код:

<html>
<head>
<title>
</title>
</head>
<body>
<object width="550" height="400"><param name="quality" value="high" /><param name="bgcolor" value="#000000" /><param name="allowScriptAccess" value="always" /><param name="movie" value="test.swf" /><param name="allowFullScreen" value="true" /><embed src="test.swf" allowscriptaccess="always" width="550" height="400" menu="false" quality="high" bgcolor="#000000" allowfullscreen="true" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" /></object>
</body>
</html>

Добавлено через 5 минут
А вообще у вас в IE работают return'ы в функциях описанных в ExternalInterface.call() ? Возможно это какая то недоделка FP и поэтому не работает?

mooncar 17.08.2011 01:15

Цитата:

Сообщение от AzagThoth (Сообщение 1021962)
А вообще у вас в IE работают return'ы в функциях описанных в ExternalInterface.call() ? Возможно это какая то недоделка FP и поэтому не работает?

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

Ну как, разобрались?

AzagThoth 17.08.2011 20:15

К сожалению нет. С IE не выходит никак :(
Цитата:

Сообщение от mooncar (Сообщение 1022323)
Приведенная мною строка постоянно включается во все флешевые инет-проекты на стадии разработки, написал модуль, он помогает определить, откуда грузится флешка - без страницы, прямо в плеере, с хоста, или я открываю страницу локально (от этого зависят относительные пути, префиксы и суффиксы ко всем используемым url-ам для загрузки внешних данных).

У меня оно не работает при тестах в среде разработки и когда запускаю через локальный плеер, а также когда делаю проектор. Симптомы те же что в IE. return в ExternalInterface.call() вовращает null. Но почему тогда когда запускаю через Firefox возвращает значение? Вообще ничего не понятно.

Так как у вас работает, подозреваю что это какая-то местная проблема связанная с моим компом :) Другого объяснения не вижу :) А настройки публикации... Там ничего не менял. Всё стандартно. И вообще суть этого метода определить на каком домене юзается флешка и если это не наш родной домен, то заблокировать флешку. В любом случае спасибо вам большое что откликнулись. Я думаю что в целях защиты и этого хватит. Ведь народ пользуется разными браузерами, и если защита работает хоть в каких-то то воровать уже никто не станет.

mooncar 17.08.2011 22:53

Цитата:

Сообщение от AzagThoth (Сообщение 1022641)
К сожалению нет. С IE не выходит никак :(

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

Так в среде разработки есть только среда разработки, ExternalInterface работает в браузере.


Кстати, вот что.
Вы наверное на домашнем компе тестируете? Локально страницу запускаете? Или на хостинге то же самое?
Если проблема с локальным тестированием, попробуйте внести диск в доверенную зону, как здесь описано, может быть из-за этого.
http://www.flasher.ru/forum/showthread.php?t=92951
Это несложно.
Плеер-плагин и плеер-компонет-ActiveX для IE - это разный софт, в принципе, может быть поэтому работает в не-IE браузерах.

AzagThoth 22.08.2011 21:08

Вот залил сюда просто пример.
http://azag--thoth.narod.ru/my.swf
Код на первом кадре:
Код AS1/AS2:

import flash.external.ExternalInterface;
text_tf.text = ExternalInterface.call('function testUrl () { return document.location.href }');

Можете проверить у себя в IE? У меня не работает. В не IE всё хорошо.

Извините что отписываюсь спустя столько дней. Были обстоятельства не позволяющие пользоваться компом. Большое спасибо вам за ваши советы :)

mooncar 22.08.2011 22:14

Если флешка опубликована на странице, то все определяется и в IE.

Вот мой пример:
http://vesta-s.ru/demo/externalinterface/main.htm
Посмотрите в IE и в не-IE браузерах (верхняя строка, на остальное не обращайте внимание).

Видимо, при прямой загрузке в IE флеш не может полноценно работать с JS.

AzagThoth 22.08.2011 22:18

Буду знать! Спасибо большое ещё раз.

mooncar 22.08.2011 22:21

Да я и сам буду знать, не обращал на это внимание раньше. Пожалуйста!


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

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