2

我在尝试让一个相当简单的弹出窗口工作时遇到了一些麻烦。这个想法是父母应该打开一个弹出窗口,然后在其中附加一个 div。

代码的相关部分:

父.html

var childWindow;

function togglePref() {
    childWindow = window.open("popup.html", "prefPopup", "width=200,height=320");
}

function loadPopupElements() {
    var prefElements = document.getElementById("prefBrd").cloneNode(true);

    var childDoc = childWindow.document;

    var childLink = document.createElement("link");
    childLink.setAttribute("href", "pop.css");
    childLink.setAttribute("rel", "stylesheet");
    childLink.setAttribute("type", "text/css");

    childDoc.head.appendChild(childLink);
    childDoc.body.appendChild(prefElements);
}

popup.html

<head>
</head>

<body onload="opener.loadPopupElements();">
</body>

这适用于 Safari 和 Chrome,但出于某种原因 IE 拒绝附加任何内容。

4

1 回答 1

2

好的,我设法通过使用 innerHTML 的丑陋解决方案解决了这个问题。显然,正如 Hemlock 所提到的,IE 不支持从另一个文档附加子级。有些人建议看一下 importNode() 方法,但我似乎也没有运气。

因此,解决方法如下:

父.html

var childWindow;

function togglePref() {
    childWindow = window.open("popup.html", "prefPopup", "width=200,height=320");
}

function loadPopupElements() {
    var prefElements = document.getElementById("prefBrd");
    var childDoc = childWindow.document;
    childDoc.body.innerHTML = prefElements.innerHTML;
}

popup.html

<head>
    <link href="pop.css" rel="stylesheet" type="text/css">
</head>

<body onload="loadElements();">
</body>

<script type="text/javascript">
    function loadElements() {
        opener.loadPopupElements();
    }
</script>

这似乎是一种非常讨厌的方法,因为在我的情况下,#prefBrd包含一些具有动态设置值的输入元素,所以为了让 popup.html 抓取它们,它必须在 loadElements 结束时进行一些迭代() 函数,这在使用 appendChild 时是不必要的。

于 2012-11-07T13:04:50.410 回答