reemplazar dialogarguments chrome javascript html asp.net modal-dialog ie-compatibility-mode

javascript - dialogarguments - showmodaldialog properties



showModalDialog; Abre una nueva ventana en IE (1)

Su problema surge porque está usando showModalDialog que presenta este comportamiento cuando usa IE .

Usted puede leer sobre ello aquí:

showModalDialog abre una nueva ventana

Si desea continuar usando showModalDialog aquí hay una showModalDialog :

modal.html

<head> <base target="_self" /> ... </head> <body style="margin:0px"> .... <a href="anotherpage.html" id="go" style="display:none;"></a> </form> </body>

frame.html

function redirectToCart() { window.parent.document.getElementById(''go'').click(); }

Ejemplo

http://plnkr.co/edit/ClxlWqkzBmTy93kJzuru?p=preview

Por favor, consulte la actualización (11/27) a continuación

Tengo una ventana modal que se inicia con su contenido en un iframe (aplicación de formas web ASP). Necesitamos tener el redireccionamiento modal a otra página, pero no puede estar dentro del iframe debido a razones de seguridad (página de procesamiento Paypal). En el modo de estándares de Chrome e IE, tenemos un código que cambia correctamente la URL modal a la correcta. Sin embargo, en el modo de compatibilidad, la redirección hace que se abra una nueva ventana modal con la URL correcta. ¿Cómo podemos evitar que abra una nueva ventana y en realidad redirigir?

Este es nuestro código actual:

dialog.redirect = function (location, ignoreFrames) { /// <summary>Redirects the dialog to a new URL</summary> /// <param name="location" type="String"></param> /// <param name="ignoreFrames" type="Boolean">If true, the dialog''s URL will be changed instead of any parent frame URLs</param> if (ignoreFrames === undefined) { ignoreFrames = true; } if (ignoreFrames === true) { if (window.top) { //Chrome and IE9+ window.top.document.location.replace(location); } else { //This was a supposed fix but it did not change the outcome //<IE8 and compat mode var redirectLink = document.createElement("a"); redirectLink.href = location; document.body.appendChild(redirectLink); redirectLink.click(); } } else { window.document.location.replace(location); } };

Actualización 11/27, con un ejemplo de problema:

Ejemplo interactivo (requiere IE10 + o cualquier buen navegador)

El siguiente es un ejemplo del problema, con todo configurado cómo lo tenemos. Cuando el modal está en modo de compatibilidad IE, abre una nueva ventana en lugar de redirigir el modal. Reparar la página para que esté en modo de compatibilidad no es un proceso fácil, ya que nuestra aplicación depende del modo de compatibilidad y la página modal externa se usa ampliamente en todas partes. Viendo la página (main.html) en Firefox (Chrome tiene ese problema de seguridad del dominio), funciona como se esperaba; el modal se redirige por completo a la nueva página.

main.html

<html> <head></head> <body> <a href="javascript:window.showModalDialog(''modal.html'', self, ''status:no;resizable:yes;help:no;scroll:no;width:1000;height:600'')">Open Modal</a> </body> </html>

modal.html

<!--[if lt IE 7]> <html class="lt-ie9 lt-ie8 lt-ie7"> <![endif]--> <!--[if IE 7]> <html class="lt-ie9 lt-ie8"> <![endif]--> <!--[if IE 8]> <html class="lt-ie9"> <![endif]--> <!--[if gt IE 8]><!--> <html class=""> <!--<![endif]--> <head> <title id="tagTitle"></title> </head> <body style="margin:0px"> <form name="Form1" method="post" action="" id="Form1"> <strong>modal.html</strong><br /> <iframe frameborder="1" src="frame.html" scrolling="yes"></iframe> </form> </body> </html>

frame.html

<!DOCTYPE html> <!--[if lt IE 7 ]> <html class="ie6" xmlns="http://www.w3.org/1999/xhtml"> <![endif]--> <!--[if IE 7 ]> <html class="ie7" xmlns="http://www.w3.org/1999/xhtml"> <![endif]--> <!--[if IE 8 ]> <html class="ie8" xmlns="http://www.w3.org/1999/xhtml"> <![endif]--> <!--[if IE 9 ]> <html class="ie9" xmlns="http://www.w3.org/1999/xhtml"> <![endif]--> <!--[if (gt IE 9)|!(IE)]><!--> <html class="" xmlns="http://www.w3.org/1999/xhtml"> <!--<![endif]--> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> </head> <body> <strong>frame.html</strong><br /> <a href="javascript:void(0)" onclick="redirectToCart();" title="My Cart">Trigger Redirect</a> <script type="text/javascript"> var redirect = function (location, ignoreFrames) { /// <summary>Redirects the dialog to a new URL</summary> /// <param name="location" type="String"></param> /// <param name="ignoreFrames" type="Boolean">If true, the dialog''s URL will be changed instead of any parent frame URLs</param> if (ignoreFrames === undefined) { ignoreFrames = true; } if (ignoreFrames === true) { window.top.document.location.replace(location); //IE will create a new window at this point, instead of changing the modal''s URL } else { window.document.location.replace(location); } }; function redirectToCart() { redirect(''anotherpage.html'', true); //Change this to false to see just the inner frame''s URL change } </script> </body> </html>

anotherpage.html

<html> <head> </head> <body> <strong>anotherpage.html</strong><br /> Success </body> </html>