Сделал временный хак. Не знаю насколько он разрешенный...
Можно ли так произвольно менять id важных элементов страницы window и document?
Ext.define("MyApp.override.ux.IFrame", {
override: "Ext.ux.IFrame",
loadMask: "<div style='text-align: center'>Подождите,<br/>загружается страница...</div>",
getRandomSuffixId: function() {
return "-iframe-" + Math.round(Math.random() * 1000);
},
getRandomId: function(prefix) {
return prefix + this.getRandomSuffixId();
},
getDoc: function() {
try {
var doc = this.getWin().document;
doc.id = doc.id == "ext-document" ? this.getRandomId("ext-document") : doc.id;
return doc;
} catch (ex) {
return null;
}
},
getWin: function() {
var me = this,
name = me.frameName,
win = Ext.isIE
? me.iframeEl.dom.contentWindow
: window.frames[name];
win.id = win.id == "ext-window" ? this.getRandomId("ext-window") : win.id;
return win;
},
});
К сожалению, даже с этим хаком какие-то проблемы вылезают после загрузки второй страницы в тот же фрейм. Но с ними сложно разобраться (не ясно откуда ноги растут, удаление метода Ext.ux.IFrame.cleanupListeners не помогло):
Uncaught TypeError: Cannot read property 'hasListeners' of undefined
Ext.define.fire @ ext-all-debug.js:18692
Ext.define.doDirectEvent @ ext-all-debug.js:18779
Ext.define.onDirectEvent @ ext-all-debug.js:18749
Ext.Function.ExtFunction.bind.method @ ext-all-debug.js:4403