Конечно, все следующее предполагает, что IFrame загружается из одного домена (такая же политика происхождения); но, учитывая ваш пример, похоже, так оно и есть. Если вы загружаете свой IFrame из другого домена, браузер будет препятствовать вам практически любому взаимодействию (вы можете изменить хэш ...).
Итак, во-первых, вам нужно получить ссылку на элемент DAMF DOM (в отличие от элемента Ext). Затем, вы можете получить ссылку на document
объект IFrame в этом пути (украденный из here):
// 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)
или 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;'})
}
}
}
}]
Я вижу, ты не принял никакого ответа на свои вопросы. Это своего рода побеждает цель переполнения стека. Было бы замечательно, если бы вы могли просмотреть все вопросы, которые вы задали, принять правильные ответы и дать отзывы о предлагаемых решениях, которые не работают. – rixo