asp.net iframe modalpopupextender

asp.net - Mover ModalPopup fuera del IFrame. ¿Posible?



modalpopupextender (4)

Tengo un iframe dentro de mi página principal. Hay una variante modal dentro de la página iframe. Entonces, cuando se muestra el modalpopup, el padre del modalpopup es el cuerpo del iframe y el cuerpo principal de la página principal. Por lo tanto, la superposición solo cubre el iframe y no toda la página.

Intenté mover el modalpopup del iframe al elemento principal del cuerpo de Windows (o cualquier otro elemento dentro del cuerpo de los padres) usando jQuery. Recibo un error de argumento no válido.

¿Cómo se muestra un modalpopup desde una página dentro de iframe y debe abarcar todo el documento, también el documento principal?

Actualizar:

Dado que pocos usuarios están interesados ​​en lograr el mismo comportamiento ... aquí está la solución

La mejor solución que sugeriría sería tener el modalpopup en la página principal ... y luego invocarlo desde el iframe ... decir algo como esto ...

/* function in the main(parent) page */ var _onMyModalPopupHide = null; function pageLoad(){ // would be called by ScriptManager when page loads // add the callback that will be called when the modalpopup is closed $find(''MyModalPopupBehaviorID'').add_hidden(onMyModalPopupHide); } // will be invoked from the iframe to show the popup function ShowMyModalPopup(callback) { _onMyModalPopupHide = callback; $find(''MyModalPopupBehaviorID'').show(); } /* this function would be called when the modal popup is closed */ function onMyModalPopupHide(){ if (typeof(_onMyModalPopupHide) === "function") { // fire the callback function _onMyModalPopupHide.call(this); } } /* functions in the page loaded in the iframe */ function ShowPopup(){ if(typeof(window.parent.ShowMyModalPopup) === "function") { window.parent.ShowMyModalPopup.apply(this, [OnPopupClosed]); } } // will be invoked from the parent page .. after the popup is closed function OnPopupClosed(){ // do something after the modal popup is closed }

Espero eso ayude


Si está utilizando el iframe simplemente para contenido desplazable, puede considerar un div con estilo con overflow: auto o scroll , en su lugar.

Una configuración como esta hace que sea más fácil modificar la apariencia de toda la página, ya que no está trabajando con varios documentos, cada uno de los cuales tiene esencialmente su propio espacio de ventana dentro de la página. Puede omitir parte de la comunicación entre fotogramas y puede ser más fácil mantener la información sincronizada si necesita hacerlo.

Esto puede no ser adecuado para todas las situaciones y puede requerir ajax (o modificar el dom con javascript) para cambiar los contenidos div en lugar de solo cargar un documento diferente en el iframe. Además, algunos navegadores móviles más antiguos, como las versiones de Android Froyo, no manejan bien los divs desplazables.


Usted respondió su propia pregunta en su actualización. El diálogo modal debe vivir en la página principal e invocarse desde el iframe. Su única otra opción es utilizar un div desplazable en lugar de un iframe.


No es posible de la manera que estás preguntando. Piénselo de esta manera: un iframe es una ventana separada. No puede (por el momento) mover un div en una página web a otra.


He hecho esto escribiendo un pequeño código para jQuery, ver más abajo, quizás esto pueda ayudar:

NOTA: asegúrese de estar haciendo en el mismo dominio

HTML:

<button type="button" id="popup">Show Popup</button> <br /> <br /> <iframe src="your url" style="width: 100%; height:400px;"></iframe>

JS:

// Author : Adeel Rizvi // It''s just a attempt to get the desire element inside the iframe show outside from iframe as a model popup window. // As i don''t have the access inside the iframe for now, so I''ll grab the desire element from parent window. (function () { $.fn.toPopup = function () { return this.each(function () { // Create dynamic div and set its properties var popUpDiv = $("<div />", { class: "com_popup", width: "100%", height: window.innerHeight }); // append all the html into newly created div $(this).appendTo(popUpDiv); // check if we are in iframe or not if ($(''body'', window.parent.document).length !== 0) { // get iframe parent window body element var parentBody = $(''body'', window.parent.document); // set height according to parent window body popUpDiv.css("height", parentBody.height()); // add newly created div into parent window body popUpDiv.appendTo(parentBody); } else { // if not inside iframe then add to current window body popUpDiv.appendTo($(''body'')); } }); } })(); $(function(){ $("#popup").click(function () { // find element inside the iframe var bodyDiv = $(''iframe'').contents().find(''YourSelector''); if (bodyDiv.length !== 0) { // Show $(bodyDiv).toPopup(); } else { alert(''Sorry!, no element found''); } }); });

CSS:

.com_popup { background-color: Blue; left: 0; position: absolute; top: 0; z-index: 999999; }