经过一行一行的调试,我发现下面的条件组合导致了错误。这可能不是唯一的原因,但它也允许我编写向用户显示警告的代码。
// 1. create an element but do not add it to the DOM
var elem = document.createElement("div");
// 2. set its innerHTML to something that contains script.
// in this line IE shows the error although the code continues.
elem.innerHTML = "<span onclick=\"alert()\">aa</span>";
// 3. add to the DOM
document.body.appendChild(elem);
// in order to fix the issue, move item #3 right after #1.
如果在设置之前将元素添加到 DOM .innerHTML
,则可以正常工作。需要注意的是代码实际上已经完成,并且在它之后,如果您检查.innerHTML
,您实际上会看到onclick
处理程序完好无损。问题是当你点击元素时它不会被解析并且不会被执行。
因此,我使用它创建了以下代码,向用户显示警告。
var test = document.createElement("div");
test.innerHTML = "<span onclick=\"window.B264E0BD67794ED9949FCF91D654F54F=1;\"></span>";
test.getElementsByTagName("span")[0].click();
if (!window.B264E0BD67794ED9949FCF91D654F54F)
alert("Your browser is configured to use Enhanced Security Configuration which is not compatible with this website.");