在 IE8 中调用从 iFrame 写入父级的父级函数
Call parent function that was written to parent from iFrame in IE8
我在 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 之外的所有我需要的浏览器上都运行良好。
(这不是跨域问题)
我得到“对象不支持这个属性或方法”
较旧的 IE 没有 textContent
。它有 innerText
,但对于 script
个元素,您使用 text
。
另外,document.head
不会在 IE8 上自动提供;请改用 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
函数来关闭另一个 window 的全局上下文时,通过文本执行此操作才有用。但大概这就是你想要做的......
我在 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 之外的所有我需要的浏览器上都运行良好。 (这不是跨域问题)
我得到“对象不支持这个属性或方法”
较旧的 IE 没有 textContent
。它有 innerText
,但对于 script
个元素,您使用 text
。
另外,document.head
不会在 IE8 上自动提供;请改用 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
函数来关闭另一个 window 的全局上下文时,通过文本执行此操作才有用。但大概这就是你想要做的......