一尘不染

如何使用jQuery公开IFrame的DOM?

javascript

我有一个代表IFrame的原型。该原型具有一个名为GoToUrl(…)的函数,可在IFrame中打开给定的url。

我的问题是:如何创建“
InternalDOM”属性并使该属性引用内部IFrame的“窗口”对象(根DOM对象)?通过以下方式:如果我的IFrame公开了一个在其“窗口”对象中包含对象X的页面,我可以这样做:

MyFrameObject.GoToUrl(pageXurl);
MyFrameObject.InternalDOM.X

任何帮助,将不胜感激。

PS:我会接受不一定与jQuery相关的答案,但我更喜欢jQuery解决方案。


阅读 364

收藏
2020-05-01

共1个答案

一尘不染

要获取window框架的对象,可以使用window.frames数组:

var iframewindow= frames['iframe_name'];

这就要求您赋予<iframe>old-schoolname属性而不是或id。另外,如果您知道iframe在页面上的顺序,则可以对其进行数字索引:

var iframewindow= frames[0];

从DOM中的iframe元素获取iframe窗口通常更为灵活,但这需要一些兼容性代码来应对IE:

var iframe= document.getElementById('iframe_id');
var iframewindow= iframe.contentWindow? iframe.contentWindow : iframe.contentDocument.defaultView;

jQuery定义了content()方法来获取document节点,但是它没有给您跨浏览器的方法,从documentwindow,所以您仍然会遇到以下问题:

var iframe= $('#iframe_id')[0];
var iframewindow= iframe.contentWindow? iframe.contentWindow : iframe.contentDocument.defaultView;

这并不是真正的大胜利。

(注意:使用jQuery进行跨框架脚本编写时要非常小心。每个框架都需要自己的jQuery副本,并且一帧副本中的方法不一定适用于另一框架中的节点。跨框架脚本编写是一个充满话题的话题陷阱。)

2020-05-01