javascript - 将所有 onclick 更改为事件侦听器
问题描述
我们最近在我们的软件中引入了 nonce 内容安全策略。问题是我们有数百个 HTML 元素通过 onclick 事件执行内联 Javascript,我们不想再接受“不安全内联”。
有没有办法从具有onclick
属性集的页面中获取所有元素,阅读他们执行它的代码并添加类似
$(element).click(function(){
doAction();
});
解决方案
该onclick
属性在您的 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>
一个技巧解决方法是做这样的事情:
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>
推荐阅读
- sql - 如何更新 json 类型的 json 中的任何字段?它应该接受一个对象或一个键数组,如果它存在则更新键,否则创建
- c++ - 如何将具有常量字段的对象添加到 std::map?
- python-3.x - “'请求'对象没有属性'学习者'”:Django Restframework
- php - 如何使用php以相同的形式从两个html输入字段上传文件?
- javascript - 如何修复、取消 useEffect 清理功能错误中的所有订阅和异步任务
- reactjs - 如何在useFormHook中设置Value值以在功能组件中重新渲染时形成
- php - PHP 使用 foreach 修改 JSON 文件
- android - 为什么我的bottomSheet 来自jetpack compose 中的屏幕顶部
- javascript - 正则表达式匹配文本中的重音而不是查询
- flutter - hls 视频的 Flutter 视频播放器质量控制