Блок IE6 Try / Catch не работает для пользовательского вызова document.someFunction - PullRequest
3 голосов
/ 18 сентября 2011

Как я могу прикрепить функцию к глобальному объекту документа в IE6 и все еще иметь возможность перехватывать исключения, генерируемые этой функцией при вызове?

Удивительно, но исключение не распространяется за пределы функции в IE6 в следующем примере:

// Declare function on document
document.someFn = function()
{
    throw new Error('Raised error');
}

// IE6: bug??
try{
    document.someFn('some parameter');
    alert('2. error has not been raised: bad!');
}
catch(err) {
}

Вы можете попробовать пример и некоторые дополнительные тестовые примеры здесь:

http://www.pokret.org/stuff/ie6-bug-test.html

Есть какие-нибудь обходные идеи?

Ответы [ 2 ]

2 голосов
/ 26 сентября 2012

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

// Declare function on document
document.someFn = function() {
  throw new Error('Raised error');
}

try {
  document.someFn.apply(null, 'some parameter');
  alert('2. error has not been raised: bad!');
}
catch(err) {
}
0 голосов
/ 18 сентября 2011
function someFn ( txt ) {
    throw new Error( 'Raised error: ' + txt );
}

try {
    someFn( 'im dead' );
    alert( 'im alive' ); // will not be shown
} catch(err) {
    if( 'description' in err ) {
        alert( err.description ); // IE
    } else {
        alert( err ); // other browsers
    }

}

Статья MSDN о try ... catch в IE.

...