PDA

Просмотр полной версии : Flash + JS Проблемы в опера и ие.


pizzZ
11.02.2008, 23:28
Здраствуйте.
Есть страница состоящая их фреймов, на которую помещен flash ролик. При нажатии на кнопку в flash выпполняеться код: getURL("JavaScript:pom1('1');");
Запускаеться функция на JS pom1
Все хорошо работает.

Проблема в следующем
Загружаю страницу в ie6. Flash уже загрузился и работает, нажимаю на кнопку, выполняеться pom1 что останавливает выполнение всего остального кода на странице. подумал, решил сделать дополнительный фрейм в ролике. Добавил на страницу такой код:


var movieName = "Flash";
function thisMovie(movieName) {
if (navigator.appName.indexOf ("Microsoft") !=-1) {
return window[movieName]
} else {
return document[movieName]
}
}
function movieIsLoaded (theMovie) {
if (typeof(theMovie) != "undefined") {
return theMovie.PercentLoaded() == 100;
} else {
return false;
}
}
function go() {
if (movieIsLoaded(thisMovie(movieName))) {
thisMovie(movieName).Play();
}
}

Функция go запускаеться когда js закончит работу.
Все хорошо. Загружаеться страница, выполняеться весь js. Flash переходит на следующий фрейм.

Теперь проблема в опера
Загружаеться страница. Переходим на любую страницу, нажимаем в браузере кнопку назад. и js не выполняеться. В итоге фрейм не начинает играть. И останавливаеться на первом пустом фрейме.


Что думаю
Добавить в первый фрейм операторы запускающие через 1,2,5 секунд следующий фрейм.
Хм, проблема будет в следующем.Но это не выход. Как узнать сколько надо ждать секунд.

вот такая проблема. Что кто думает?

P.S. Flash 6 использую

iNils
12.02.2008, 17:02
Для взаимосвязи флеша с js есть класс ExternalInterface. Используйте его, а не getURL("javascript

pizzZ
12.02.2008, 17:10
Дабы в ИЕ 6 на XP стандартной установки, ролик работал без установки плагинов использую 6 flash. Весь ролик это набор кнопок. ExternalInterface не поддерживает 6 плеер.

iNils
12.02.2008, 17:21
Ну и зря. Процент использования 6-го плеера ничтожно мал.

pizzZ
12.02.2008, 17:26
А где посмотреть этот процент?

screamge
12.02.2008, 17:26
На Back (Forward) в Opere даже алерт не срабатывает.

Нужно разбираться с этим:

выполняеться pom1 что останавливает выполнение всего остального кода на странице.


Так не должно происходить.

А где посмотреть этот процент?
http://www.adobe.com/products/player_census/flashplayer/version_penetration.html

pizzZ
12.02.2008, 17:31
Однако происходит. Сюда и написал, потому что сам немогу ниче придумать больше.

iNils
12.02.2008, 17:33
В 2006 году :)
Я тогда собирал статстику, с 5000 уникальных пользователей в день. 40% пользовались 7-плеером, 40% - 8-ой. На 6-ку призодилось меньше 9%, и 1% на 4 и 5.
Через полгода, когда уже вышла бета 9-ки, на ней сидело уже 5%. А доля 6-ки уменьшилась на 2%, то есть стала 8%.

Если вы считаете, что за 1,5 года она не упала до 2-3%, то мучайтесь дальше с getURL. :)

screamge
12.02.2008, 17:35
Кстати говоря, процент того что у пользователя не будет 8 плейера равен проценту что у пользователя будет отключён дж-с. Так что идеальных решений в этом случае нет.

pizzZ
12.02.2008, 17:37
У заказчика стоит 6. Если вдруг страница попросит что то обновить, заказчик не будет рад. Понятно, что можно обьяснить, запарить, и уговорить. НО! Лучше придумать решение, дабы и в 6 работало.

iNils
12.02.2008, 17:40
Число пользователй 8-ки и 7-ки меньше, чем 9-ки. Так как это могут быть только те, кто давно ставил эти плеера.

У заказчика стоит 6.А если бы у него стояла 5 или 4?

pizzZ
12.02.2008, 17:45
Тогда бы отказался от flash.
Ладно. Все это флейм.
Вопрос конкретный, подскажите как без смены версии flash плеера заставить все работать? Или что бы вы сделали. (смену плеера не предлагать)

Я думаю, на 1 фрейм ролика повесить скрипт, который по прошествию 5-ти секунд будет переходить на 2-ой фрейм. Есть ли какие нибудь варианты?

screamge
12.02.2008, 17:48
И вообще исходя из логики «по-умолчанию» тогда оперы у юзера тоже не должно быть.
А вы попробуйте через интервал вызывать функции дж-с на странице в опере при клике на бэк, узнаете ответ, выйдет или нет :)

pizzZ
12.02.2008, 18:07
А вы попробуйте через интервал вызывать функции дж-с на странице в опере при клике на бэк, узнаете ответ, выйдет или нет :)

вышло. :) Благодарю.
Только как это лучше использовать)

pizzZ
12.02.2008, 18:50
Кто ищет тот всегда найдет. Благодарю screamge

function start(){
s = setInterval("ale()",1000);
}
function ale () {
if (movieIsLoaded(thisMovie(movieName))) {
if(thisMovie(movieName).GetVariable('i')==1) go();
}
}
function go() {
p=20;
if (movieIsLoaded(thisMovie(movieName))) {
thisMovie(movieName).Play();
}
}

onLoad="JavaScript:start();"


Во flash на первом фрейме i =1 на втором 2