Если я вызову функцию flash одновременно со ссылкой href, всегда ли будет выполняться функция flash?

У меня есть следующий код в page1.php:

<a href="page2.php" onClick="javascript:callFlash();">Go to page</a>

Это вызывает функцию во Flash-ролике на странице page1.php и открывает страницу page2.php.

Мой вопрос таков:

Могу ли я быть уверен, что функция flash всегда будет вызываться и завершать выполнение до вызова page2.php? (Функция flash фактически сохраняет некоторые данные в локальный общий объект).

Или я должен добавить немного кода к функции flash для getURL("page2.php");, когда это будет сделано.

любые мысли ура


person undefined    schedule 17.06.2009    source источник


Ответы (3)


Если вам определенно нужно, чтобы страница открывалась после выполнения функции флэш-памяти, то единственный способ гарантировать это — перенаправить из функции флэш-памяти, как вы уже поняли.

person Jason Miesionczek    schedule 17.06.2009

Прежде всего, не включайте псевдопротокол "javascript:" в атрибут onclick.

Попробуйте использовать onclick="return callFlash()" — таким образом, браузер должен дождаться завершения JS-функции, прежде чем перейти по ссылке. Я не знаю, какой метод вы используете для вызова функций AS, но если он синхронный (то есть может возвращать данные в JS без использования обратных вызовов или чего-то еще), то функция AS завершит выполнение функции JS и до перезагрузки страницы. Так что это должно быть безопасно.

person Maciej Łebkowski    schedule 17.06.2009

Ответ на вопрос - нет.

Существует простой обходной путь. Просто остановите распространение события click и позвольте flash выполнить перенаправление:

<a href="page2.php" onClick="stop_and_call(event);"/>

JavaScript:

function stop_and_call(e)
{
    if (!!(window.attachEvent && !window.opera)){
        // this is IE
        e.returnValue = false;
        e.cancelBubble = true;
    } else {
        e.preventDefault();
        e.stopPropagation();
    }
    e.stopped = true;
    callFlash();
}
person Pierre Spring    schedule 17.06.2009