簡體   English   中英

調用從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

另外,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函數來關閉另一個窗口的全局上下文時,通過文本執行此操作才有用。 但這大概就是您想要做的...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM