调用在IE8中从iFrame写入父级的父函数

时间:2015-01-28 14:51:21

标签: javascript iframe internet-explorer-8

我在IE8中遇到了问题。我有一个iframe如下。

<!doctype html>
<html lang="en">
<head>
</head>

<body>
<script id="myscript">
function foo() { alert('foo'); }
</script>


(function () {
    var pdoc = parent.document;
    var dest = pdoc.head;
    var text = document.getElementById("myscript").textContent;

    var pscr = pdoc.createElement("script");
    pscr.textContent = text;
    dest.appendChild(pscr);

    parent.foo();
})();
</body>
</html>

iframe将脚本复制到父级并在父级上运行 foo 函数。

除了IE 8之外,这对我需要的所有浏览器都能很好地工作。 (这不是跨域问题)

我得到&#34; 对象不支持此属性或方法&#34;

1 个答案:

答案 0 :(得分:1)

较旧的IE没有textContent。它有innerText,但对于script元素,您使用的是text

另外,IE8上不会自动提供document.head;请改用document.getElementsByTagName('head')[0]

通过这两项更改,这适用于IE8,IE11,当前Chrome和当前的Firefox:

(function () {
    var pdoc = parent.document;
    var dest = pdoc.getElementsByTagName('head')[0];
    var script = document.getElementById("myscript");
    var prop = 'textContent' in script ? 'textContent' : 'text';
    var text = script[prop];

    var pscr = pdoc.createElement("script");
    pscr[prop] = text;
    dest.appendChild(pscr);
    parent.foo();
})();

当然,通过文本执行此操作仅在您需要新的foo函数关闭其他窗口的全局上下文时才有用。但大概是你正在尝试做的......