Проверка, определена ли функция в окне открывания в IE8 - PullRequest
5 голосов
/ 13 апреля 2011

У меня есть всплывающее окно, которое позволяет открывающему окну опционально определять функцию обратного вызова, которая, если она будет определена, будет вызываться, когда пользователь завершит работу с всплывающим окном. Основываясь на совете, который я прочитал, я делаю это:

if (window.opener && (typeof window.opener.callbackFunction == 'function')) {
  window.opener.callbackFunction()
}

Это прекрасно работает в Firefox - когда функция определена, typeof является «функцией», как и предполагалось. Однако в IE8 typeof вместо этого является «объектом». Функция обычно определяется в открывателе, например:

function callbackFunction() {
  ...
}

Кто-нибудь знает, почему typeof будет другим в IE8? Я также открыт для других предложений о том, как этого добиться. Я также попытался if (window.opener && window.opener.callbackFunction), но это привело к взрыву IE8, когда функция не была определена.

Ответы [ 2 ]

7 голосов
/ 13 апреля 2011

Вы можете попробовать

if ( window.opener && (typeof window.opener.callbackFunction != 'undefined') {
  window.opener.callbackFunction();
}

В настоящее время у меня нет IE, поэтому я не могу проверить это, но считаю, что он будет работать.

0 голосов
/ 26 февраля 2013

Это взлом, но это будет работать:

if (typeof window.opener.callbackFunction == 'object') {
   // this first 'if' is required because window.opener returns an object even
   // if window.opener has been closed
   if(window.opener.callbackFunction.toString().substr(0,8) == 'function') {
      window.opener.callbackFunction();
   }
}

Примечание: он не будет работать для некоторых встроенных функций браузера, таких как alert ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...