![](/img/trans.png)
[英]Why does “[value='']” throw an exception in IE7 and “:not(:not([value='']))” does not?
[英]Why does this throw an exception in IE 11
为什么以下代码在Internet Explorer 11中抛出“未指定的错误”(在appendChild
行上),我单击该按钮?
<!DOCTYPE html>
<html>
<head>
<script>
function go() {
var popUp = window.open('about:blank');
popUp.document.body.appendChild(document.createElement('div'));
}
</script>
</head>
<body>
<button onclick="go()">Click Me</button>
</body>
</html>
您正在使用当前页面的文档来创建div,尝试使用弹出窗口中的文档
popUp.document.body.appendChild(popUp.document.createElement('div'));
如果在处理用户事件(如点击)期间使用,弹出窗口阻止程序通常只允许window.open
。 如果弹出窗口被阻止,那可能会导致问题。
您需要从用户发起的事件中调用window.open,例如单击链接,该链接需要具有target="_blank"
。 否则,Chrome和Firefox将阻止弹出窗口。
此外,错误被触发,因为在尝试将div附加到它之前不检查popUp
是否为null
。 如果没有弹出窗口,则无法向其追加元素。
(我忘记了这一点,Musa让我记住,所以谢谢)IE将阻止在元素正在追加的窗口上下文中附加在不同窗口上下文中创建的任何元素。 因此,您需要使用popUp的上下文创建它,而不是使用当前文档创建DIV节点。
总而言之,这就是代码的外观。
<!DOCTYPE html>
<html>
<head>
<script>
function go()
{
var popUp = window.open('about:blank');
try
{
// Make sure you have a body document when creating the new window....
popUp.document.write("<html><head><title></title></head><body></body>");
popUp.document.body.appendChild(popUp.document.createElement('div'));
}
catch(e)
{
console.log(e);
}
}
</script>
</head>
<body>
<button onclick="go()">Click Me</button>
</body>
</html>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.