firefox - 无法接收动态JavaScript的事件

Mat*_*345 7 javascript firefox dynamic

我有一些动态javascript创建元素,使用click事件元素处理程序...脚本包含在另一个域中.

但是,Firefox在运行时会发出安全警告,但不会处理点击事件(Chrome工作正常).

以下是简化版

<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"></head>
<body>
<h2 id="headertitle">TEST</h2>
<br/>

<script type="text/javascript" src="somewhereelse.com/script.js">
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

Javascript包括:

document.getElementById("headertitle").insertAdjacentHTML('beforeBegin',
            "<button value='TEST' onclick='clickHandler(this)' >Button</button>");

function clickHandler(evt){
    alert("clicked");
}
Run Code Online (Sandbox Code Playgroud)

警告信息:

安全包装器拒绝在特权Javascript对象上访问未定义的属性.通过exposedProps支持将特权对象暴露给不受信任的内容正逐渐被删除 - 改为使用WebIDL绑定或Components.utils.cloneInto.请注意,仅报告来自给定全局对象的第一个被拒绝的属性访问.

小智 -1

我在这里尝试了你的代码,它在 Firefox 50.1.0 上运行良好。=/

不过,我强烈建议您使用 JQuery 来处理动态创建的元素触发的事件。JQuery 以不同的方式处理 DOM,它是跨浏览器的,而且它就是为这种情况而设计的。它可能会解决你的问题。=D

尝试将您的 html 更改为

<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"></head>
<body>
<h2 id="headertitle">TEST</h2>
<br/>
<script type="text/javascript" src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
<script type="text/javascript" src="somewhereelse.com/script.js">
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

和你的JS代码

document.getElementById("headertitle").insertAdjacentHTML('beforeBegin',
            '<button value="TEST" class="clickable" id="btn1">Button</button>');

$('.clickable').on('click', function() {
    alert($(this).attr('id') + ' was clicked');
});
Run Code Online (Sandbox Code Playgroud)

那应该可以成功!干杯! =)