2013-05-02 1 views
1

все!Javascript: parent/child window.close не запускается в Android-браузере Android

У меня возникла проблема с подключением к родительскому/дочернему окну в браузере Android Browser. Safari, Chrome, Firefox, IE (!!!), iOS, все хорошо! Android v4.1.1, не так много.

Поток:

  1. От родителя, я открываю окно ребенка, и добавить петлю для прослушивания для дочернего окна, чтобы закрыть.
  2. Окно для детей закрывается, родитель уведомляется.
  3. Родитель очищает цикл, вызывает обработчик.

Легко, правда?

Проблема: Android может вызвать window.close() от ребенка, но родитель не знает о близком событии, то есть, шаг 3 никогда не бывает. Возможно, javascript приостановлен в родительском, а дочернее окно открыто? Javascript действительно работает в родительском окне. Есть ли окончательное решение или обходной путь для этой проблемы?

Мои CoffeeScript:

openTwitterAuthWindow: (authURL) => 
    @twitterWindow = window.open(authURL, "_blank", "width=550,height=420") 
    @checkInterval = window.setInterval(@checkChildWindow, 500) 

checkChildWindow:() => 
    if (@twitterWindow && @twitterWindow.closed) 
     alert("Excelsior!") # <-- Not called, unfortunately 
     window.clearInterval(@checkInterval) 
     @twGetLoginStatus() 

только Javascript внутри дочернего окна:

<script type="text/javascript"> 
    window.close(); 
</script> 

Заранее спасибо!

ответ

0

Как вы предположили, похоже, что родительское окно не знает, когда дочернее окно закрылось. Если дочернее окно закрыто, то ссылка на него должна иметь значение null в этой точке, поэтому в Android должно быть указано следующее:

openTwitterAuthWindow: (authURL) => 
    @twitterWindow = window.open(authURL, "_blank", "width=550,height=420") 
    @checkInterval = window.setInterval(@checkChildWindow, 500) 

checkChildWindow:() => 
    if ([email protected] || @twitterWindow.closed) 
     alert("Excelsior!") 
     window.clearInterval(@checkInterval) 
     @twGetLoginStatus() 
Смежные вопросы