Ventana mímica. onerror en Opera usando javascript

Actualmente estoy trabajando en una aplicación web, tengo un mecanismo de logging JS que maneja el error de Javascript que no son detectados por el código js dentro de la página. Estoy usando window.onerror para detectar todos esos errores y registrarlos en otro lugar.

Sin embargo, el problema es con Opera que no tiene el evento window.onerror. Un enfoque en el que podría pensar es, procesar en cadena todo el código de funciones js e insert bloques de captura de testing dentro de esas funciones después de la carga del cuerpo. Sin embargo, en muchos casos no funciona, pero al less funciona en cierta medida.

Estoy seguro de que este enfoque apesta, pero no se me ocurre nada mejor. Por favor avise.

Actualización: por ahora, estoy llamando al código a continuación para capturar tantos errores como pueda.

function OnBodyLoad() { var allElements = document.getElementsByTagName("*"); for(var cnt = 0;cnt < allElements.length;cnt++) { RegisterAllEvents(allElements[cnt]); } } function RegisterAllEvents(objToProcess){ for(var cnt = 0;cnt < objToProcess.attributes.length;cnt++){ if(IsAttributeAnEvent(objToProcess.attributes[cnt].name)) { objToProcess.attributes[cnt].value = 'try{'+objToProcess.attributes[cnt].value+'}catch(err){LogError("'+ objToProcess.id+'"'+ ',err);}'; } } } 

4 Solutions collect form web for “Ventana mímica. onerror en Opera usando javascript”

Esto también ocurre en Safari, AFAIK.

Lo que sí se puede hacer es crear un bloque try / catch global para todos los códigos JS en lugar de un análisis de text, lo que podría ser complicado si se trata de cosas como:

 (function ($){ $(function (){ }); })(jQuery); 

Opera 11.60+ es compatible con window.onerror .

Opera's Dragonfly admite la debugging remota . Es posible que pueda hackearlo (está todo escrito en JavaScript) y registrar los errores usted mismo (lamentablemente el protocolo aún no se ha publicado ).

¡puedes replace Error.prototype.toString en Opera!

 window.onerror = function (msg) { // send msg to http://errors.net/log.php, for example (new Image()).src = 'http://errors.net/log.php?msg=' + encodeURIComponent(msg); }; if (({}).toString.call(window.opera) === '[object Opera]') { (function () { var x = Error.prototype.toString; Error.prototype.toString = function () { var msg = ''; try { msg = x.apply(this, arguments); if (typeof (window.onerror) === "function") { window.onerror(msg, typeof (this) === 'object' ? this.stack : '', ''); } } catch (e) {} return msg; }; }()); } 

parece que no funciona para Opera 11.50 … solo para las primeras versiones …

aquí se menciona que Opera ahora es compatible con window.onerror:

http://my.opera.com/ODIN/blog/2011/11/07/what-s-new-in-opera-development-snapshots-4-november-2011-edition

pero window.onerror no parece funcionar en Opera Mini (por ejemplo, el agente de usuario "Opera / 9.80 (J2ME / MIDP; Opera Mini / 7.1.32422 / 30.3214; U; en) Prest / 2.8.119 Version / 11.10"). Esto hace que sea realmente difícil depurar javascript en mobilees con Opera Mini.

  • Cómo escribir JavaScript legible
  • Formas de extender el object Array en javascript
  • Android WebView canGoBack siempre verdadero
  • ¿Cómo matar una function de Javascript si se vuelve a llamar?
  • ¿Cómo comprobar si una cadena contiene text de una matriz de subcadenas en JavaScript?
  • ¿Problema de scope de JavaScript en Opera?
  • Pasar una matriz como parámetro de function en JavaScript
  • ¿Es posible sobrescribir la function window.location con una function personalizada?
  • JQuery pasa esto a la function
  • ¿Es correcto que JSON.stringify (2) == "2" pueda devolver false?
  • Ejemplos del mundo real del uso de networkinguctionRight en JavaScript
  • ¿Los cierres de javascript con una reference de este / auto causan memory leaks?
  • ¿Cuáles son las ventajas de Promises sobre CPS y Continuation Functor / Monad?
  • Javascript tiene muchos buenos JS marco (como Node.js AngularJS Vue.js React.js) es el mejor lenguaje de script.