Recientemente introdujimos la política de seguridad de contenido nonce en nuestro software. El problema es que tenemos cientos de elementos HTML que ejecutan Javascript en línea con eventos onclick y ya no queremos aceptar 'inseguro en línea'.
¿Hay alguna forma de obtener todos los elementos de una página con el conjunto de atributos onclick , leer el código que ejecutan y agregar algo como
$(element).click(function(){ doAction(); });El atributo onclick se ejecuta antes que cualquier otro controlador de eventos de clic en su JS.
function doSomething() { console.log('I do something') } var allElements = document.getElementsByTagName('*'); for (var i = 0; i < allElements.length; i++) { if (typeof allElements[i].onclick === 'function') { allElements[i].addEventListener("click", function(e) { console.log('Before I do something'); }); } } <div onclick="doSomething()">Click me to doSomething</div>Una solución engañosa sería hacer algo como esto:
function doSomething() { console.log('I do something') } var allElements = document.getElementsByTagName('*'); for (var i = 0; i < allElements.length; i++) { if (typeof allElements[i].onclick === 'function') { allElements[i].addEventListener("mousedown", function(e) { console.log('Before I do something'); }); } } <div onclick="doSomething()">Click me to doSomething</div>