当然,以下都是假设 IFrame 是从同一个域(同源策略)加载的;但是,考虑到你的例子,情况似乎就是这样。如果您从另一个域加载 IFrame,浏览器将阻止您与它进行几乎任何交互(您只能更改哈希...)。
因此,首先,您需要获取对 IFrame DOM 元素的引用(而不是 Ext 的元素)。然后,您可以通过这种方式获取对 IFrame 对象的引用(从此处document
窃取):
// iframe is the DOM element
var iframeWindow = (iframe.contentWindow) ? iframe.contentWindow : (iframe.contentDocument.document) ? iframe.contentDocument.document : iframe.contentDocument,
doc = iframeWindow.document;
然后您可以使用Ext.get(doc)
or Ext.fly(doc)
,并使用返回的包装器 Ext Element。
这是一个完整的示例,它定义了一个“iframe 组件”,等待它的加载事件,并添加一个子组件:
items: [{
xtype: "component"
// using autoEl instead of html property, so the iframe will be the `el`
// property of the component
,autoEl: {
tag : "iframe"
,src: "/page/object/"
,frameborder: 0
}
// listening on the iframe's load event
,listeners: {
el: {
load: function() {
var iframe = this.dom,
iframeWindow = (iframe.contentWindow) ? iframe.contentWindow : (iframe.contentDocument.document) ? iframe.contentDocument.document : iframe.contentDocument,
docEl = Ext.fly(iframeWindow.document),
body = docEl.down('body'); // instance of Ext.dom.Element
// now you can do what you want with the iframe body!
body.createChild({tag: 'div', html: 'I am bold', style: 'font-weight: bold;'})
}
}
}
}]