从 IFRAME IE11 调用父 JavaScript

Posted

技术标签:

【中文标题】从 IFRAME IE11 调用父 JavaScript【英文标题】:Invoking Parent JavaScript from IFRAME IE11 【发布时间】:2017-04-28 17:39:18 【问题描述】:

我要做的就是在 iframe 父级上调用 javascript 函数。 这也在同一个域上。

如果我创建一个按钮来从框架中触发父级:

<script>
        function onClick() 
            parent.hidePrintButton();
        
</script>
<button id="test" onclick="onClick();">Call Parent Window Function</button>

它在所有浏览器中都按预期工作。

但是,当我有一个执行 ajax 调用时:

parent.hidePrintButton();

在 IE 中不会调用父级,但在所有其他浏览器中都会调用。

然后我得到错误:

对象不支持属性或方法'hidePrintButton'

这看起来像当我与页面交互时,父级工作但在 iframe onload 中运行时却没有。

我已经尝试过 postmessage、事件侦听器、绑定、父级。而且这些似乎都无法在父页面上运行 JavaScript。

虽然这可能与按下按钮并且焦点位于 iframe 上的时间有关。

【问题讨论】:

【参考方案1】:

尝试使用 window.parent 而不是父级:

https://developer.mozilla.org/en-US/docs/Web/API/Window/parent

https://msdn.microsoft.com/en-us/library/ms534326(v=vs.85).aspx

【讨论】:

这个我也试过了,没用。【参考方案2】:

无法仅在 IE11 上解决问题。

解决此问题的唯一方法是创建一种方法来轮询 iframe,直到它返回您正在寻找的响应:

var keepPolling = true;
function pollFrame() 
   if ($("#refFrame")[0].contentWindow.processed)
      setProcessed();
      keepPolling = false;
   
   if(keepPolling) 
      setTimeout(pollFrame, 750);
   
;

【讨论】:

以上是关于从 IFRAME IE11 调用父 JavaScript的主要内容,如果未能解决你的问题,请参考以下文章

js/jquery父元素调用子元素方法失效

iframe子页面在跨域情况下使用父页面的方法

iframe子页面调用父页面javascript函数的方法

从 iframe 调用父窗口函数

如何从父页面调用 iframe 中的脚本?

iFrame 和 IE 11