Semblable à this question, mais ma configuration est un peu différente.Comment obtenir l'élément parent (pas seulement la fenêtre) d'un iframe?
J'ai écrit cette fonction:
function ShowDialog(url, width, height, id, options) {
var self = arguments.callee;
if(!self.dialogs) self.dialogs = {};
var src = url + (url.indexOf('?') === -1 ? '?' : '&') + '_popup=1';
if(id) src += '&_field=' + encodeURIComponent(id);
if(url in self.dialogs === false) {
var defaults = {
width: width,
height: height,
modal: true,
resizable: false,
draggable: false,
closeText: 'Close'
};
self.dialogs[url] = $('<div/>')
.html('<iframe width="100%" height="100%" marginwidth="0" marginheight="0" frameborder="0" scrolling="auto" src="'+src+'">Your browser does not support iframes.</iframe>')
.dialog(options ? $.extend(defaults, options) : defaults);
} else {
if(self.dialogs[url].data('reload')) {
self.dialogs[url].data('reload', false).children('iframe').attr('src', src);
}
self.dialogs[url].dialog('open');
}
return false;
}
que j'utilise comme ceci:
<button onclick="return ShowDialog('/companies/add', 400, 320, 'id_company');">New</button>
Lorsque vous cliquez sur le bouton, il ouvre une boîte de dialogue avec un iframe contenant un formulaire. Lorsque vous soumettez le formulaire, il redirige vers une autre page qui contient uniquement un script censé fermer le dialogue.
Dans l'autre question, il a l'ID de l'iframe afin qu'il puisse le trouver, puis appelez .dialog('close')
. J'ai généré mon iframe à la volée, donc je ne sais pas comment y accéder.
Cependant, je sais que mon iframe se trouve toujours à l'intérieur d'un div qui a l'objet .dialog
... il devrait y avoir un moyen d'obtenir l'élément parent d'un iframe à l'intérieur de ce iframe, non?
Quelqu'un sait-il comment?
Peut-on trouver peut-être faire quelque chose comme
window.parent.jQuery(this).parent()
? Je ne sais pas ce que this
doit être cependant. Une sorte de référence à elle-même ... window
ne fonctionnait pas.
Cela fonctionne parfaitement. J'espère que c'est compatible avec plusieurs navigateurs. – mpen
Je pense que c'est assez compatible car je l'utilise dans la plupart de mes projets. –
@Mark non, il ne fonctionnera pas sur Cross-domaine .. – Sarath