将所有 onclick 更改为事件侦听器
Posted
技术标签:
【中文标题】将所有 onclick 更改为事件侦听器【英文标题】:Change all onclick to event listeners 【发布时间】:2021-10-19 23:47:54 【问题描述】:我们最近在我们的软件中引入了 nonce 内容安全策略。问题是我们有数百个 html 元素通过 onclick 事件执行内联 javascript,我们不想再接受“unsafe-inline”了。
有什么方法可以从带有onclick
属性集的页面中获取所有元素,阅读他们执行它的代码并添加类似的内容
$(element).click(function()
doAction();
);
【问题讨论】:
【参考方案1】: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>
【讨论】:
以上是关于将所有 onclick 更改为事件侦听器的主要内容,如果未能解决你的问题,请参考以下文章
添加处理程序到文档事件将范围更改为 Sencha Touch 中的文档
按钮 onClick 事件侦听器在 Electron 应用程序中不起作用
是否可以将 onclick 侦听器添加到 QCheckBox?
<a> 的父级事件冒泡,从 onclick 事件侦听器返回 false