Цитата:
|
а кто прилетел вместо него?
|
Цитата:
|
хрен редьки не слаще..
|
tenshi,
может попробуешь довести свой скрипт под осла? у меня не выходит: 1)на root onpropertychange не срабатывает. зато срабатывает на document-е 2)даже если он срабатывает, то оба срабатывания происходят после вывода alert([ inverse( 0 ), inverse( 1 ) ]) то есть я не знаю, как получить res в такой ситуации |
у меня в осле работало.. правда проверял я в 8..
а вот в лисице - жопа >_<" ща попробую по другому переделать.. |
Хитрый план такой хитрый)))
не гарантирую, что это будет работать в 100% случаев/ var FThread= new function(){ //Version: 3 //Descr: 'creates a wrapper for function that allows you to not be afraid of exceptions in' //License: 'public domain' //Implementation: var root= document.documentElement var FThread= function( proc ){ var thread= root.addEventListener ? function( ){ var res, self= this, args= arguments root.addEventListener( 'launch thread', function( ){ root.removeEventListener( 'launch thread', arguments.callee, false ) res= thread.proc.apply( self, args ) }, false ) var event= document.createEvent( 'UIEvents' ) event.initEvent( 'launch thread', false, false ) root.dispatchEvent( event ) return res } : function( ){ var res, self= this, args= arguments var image=document.createElement('img'); image.onerror=function() { res= thread.proc.apply( self, args ) } image.src='';//or 'about:blank' return res } thread.proc= proc return thread } //Export: return FThread //Usage: var inverse= FThread(function( a ){ if( a === 0 ) throw 'division by zero' return 1/a }) alert([ inverse( 0 ), inverse( 1 ) ]) // prints [ undefined, 1 ] and exception 'division by zero' in console log } исключение бросается уже как в опере, так и в осле. DebugBar даже начал отладку а вот в лисе, исключения не пробрасываются |
var FThread= new function(){ Version: 4 Descr: 'creates a wrapper for function that allows you to not be afraid of exceptions in' License: 'public domain' Implementation: var scripts= document.getElementsByTagName( 'script' ) var script= scripts[ scripts.length - 1 ] var starter= document.createElement( 'button' ) starter.id= 'thread starter' starter.style.display= 'none' script.parentNode.insertBefore( starter, script ) var FThread= function( proc ){ var thread= function( ){ var res, self= this, args= arguments starter.onclick= function( ev ){ ( ev || event ).cancelBubble= true starter.onclick= null res= thread.proc.apply( self, args ) } starter.click() return res } thread.proc= proc return thread } Export: return FThread Usage: var inverse= FThread(function( a ){ if( a === -1 ) throw (void 0)() if( a === 0 ) throw new Error( 'custom error' ) return 1/a }) alert([ inverse( -1 ), inverse( 0 ), inverse( 1 ) ]) // alerts ",,1" and two exceptions in console log } исключения всплывают везде, только вот кастомные исключения теряют бэктрейс в мозилле и вообще всё в опере |
с оперой разобрался - нужно было обновить и включить: opera:config#UserPrefs|Exceptions Have Stacktrace
|
Цитата:
вторая до правки также теперь в мозилле пробрасывает. теперь вообще везде работает. красота про click хорошо придумал. для него есть гарантия, что если на протестированном браузере сработал именно так, то так будет всегда, а не зависеть от погоды, как в случае image.onerror у меня |
Часовой пояс GMT +3, время: 06:51. |