2015-06-09 2 views
0

Я пытаюсь создать «мертвый мужской переключатель» во флэш-приложении. Когда приложение аварийно завершает работу или замедляется, я хочу, чтобы веб-страница обновилась. Из того, что я читал и видел здесь, можно использовать ExernalInterface для вызова функции resetTimer JS.AS3 - Использование ExernalInterface.call Сбросить таймер JS

Heres мой AS3 ..

//External Timer and Handler 
var externaltimer: Timer = new Timer(1000); 
externaltimer.addEventListener(TimerEvent.TIMER, callTimerJS); 
externaltimer.start(); 

function callTimerJS(event : Event):void{ 
    ExternalInterface.call("window.clearTimeout"); 
    ExternalInterface.call("timeoutHandle"); 

} 

Heres мои JS в моей HTML страницы ...

var timeoutHandle = window.setTimeout(function() { 
    window.location.reload(1); 
}, 15000); 

window.clearTimeout(timeoutHandle); 

timeoutHandle = window.setTimeout(function() { 
    window.location.reload(1); 
}, 15000); 

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

+0

Это была концепция, которую я описал там в комментарии, и она заявила, что для перезагрузки окна необходимо выполнить три условия. Во-первых, 'ExternalInterface.available' должен быть правдой. Во-вторых, на стороне JS 'setTimeout' должен вызываться только при первом обращении к внешнему интерфейсу. И, в-третьих, есть ограничения (пока неизвестные мне) о функции, которую 'ExternalInterface.call()' может вызывать извне. Но Андре Ленерт представил основы того, что должно быть там. – Vesper

ответ

1

Используйте обычные функции-объявления и убедитесь, что это не имя функции js-core. Вы можете назвать только функции.

AS

//External Timer and Handler 
var externaltimer: Timer = new Timer(1000); 
externaltimer.addEventListener(TimerEvent.TIMER, callTimerJS); 
externaltimer.start(); 

function callTimerJS(event : Event):void{ 
    if (ExternalInterface.available) { 
     ExternalInterface.call("clearTimeoutfromExtern"); 
    } 
} 

JS

var timeoutHandle; 
function clearTimeoutfromExtern(){ 
    clearTimeout(timeoutHandle); 
    timeoutHandle = setTimeout(refresh, 15000); 
} 
function refresh(){ 
    window.location.reload(1); 
} 

Я просто написал здесь в редакторе ... приветствий.

+0

Если по какой-либо причине 'ExternalInterface.available' будет ложным, это приведет к безусловной перезагрузке веб-страницы независимо от фактической производительности Flash. Кроме того, OP говорит, что решение должно перезагрузить веб-страницу, если приложение Flash перестает «пинговать» JS, а не вообще. – Vesper

+0

Я проигнорировал случай 'ExternalInterface.available == false', чтобы показать основную обработку. Этот случай должен быть обработан. Во второй точке я изменил свой код выше, чтобы получить поведение, которое было предложено. Сожалею. –

+0

Фактически обработка недоступности внешнего интерфейса выполняется, не устанавливая тайм-аут в первой строке вашего JS (или устанавливая этот тайм-аут на что-то фиктивный, так что 'clearTimeout()' не будет вызывать ошибку из-за нулевого параметра). – Vesper

Смежные вопросы