ejemplo - El problema pasa los parámetros a través de Iframe en IE
iframe javascript (6)
Estoy intentando ejecutar un HTTP GET desde mi sitio web a otro sitio web que se ingresa a través de iframe.
En Firefox, puedes ver en la fuente que la url correcta está en el iframe src junto con sus parámetros correctos, y funciona.
En IE, puede ver en la fuente que la URL correcta está en el iframe src junto con sus parámetros correctos, y no funciona ...
¿Hay algo sobre IE que no le permite pasar parámetros a través de un iframe en la cadena de consulta?
Intenté actualizar el iframe en IE, intenté actualizar mi página y el iframe en IE, e intenté copiar el URL y volver a pegarlo en el iframe src (forzándolo a actualizar como si acabara de ingresar en la barra de direcciones para esa ventana iframe). Todavía no hay suerte!
¿Alguien sabe por qué está sucediendo esto o tiene alguna sugerencia para tratar de evitar esto?
Editar: No puedo dar un enlace a esto porque el sitio requiere una contraseña y credenciales de inicio de sesión tanto para nuestro sitio como para el de nuestro proveedor. Aunque podría hacer una cuenta de prueba en nuestro sitio, no serviría de nada para el proceso de prueba porque no puedo hacer lo mismo con el sitio del proveedor. En cuanto al código, todo lo que hace es crear el src desde el código de backend en la carga de la página y configurar el atributo src desde el back-end ...
//Backend code to set src
mainIframe.Attributes["src"] = srcWeJustCreated;
//Front end iframe code
<iframe id="mainIframe" runat="server" />
Editar: El problema nunca fue resuelto. La respuesta fue aceptada automáticamente porque la recompensa expiró. Voy a volver a hacer esta pregunta con más información y un enlace a la página cuando nuestro sitio esté más cerca de comenzar a funcionar.
Gracias,
Mate
Por la configuración de seguridad predeterminada en IE los parámetros de consulta están bloqueados en Iframes. En la pestaña de seguridad debajo de las opciones de Internet, configure su nivel de seguridad en bajo. Si esto soluciona tu problema, entonces sabes que ese es tu problema. Si el sitio es para clientes externos, entonces esperar que rechacen su configuración de seguridad probablemente no sea razonable, por lo que es posible que tenga que buscar un empleo.
Digamos que su sitio es www.acme.com y la fuente iframe está en www.myvendor.com .
IIRC, la mayoría de las configuraciones de seguridad de nivel de dominio no se preocupan por el nombre de host, así que agregue un DNS CNAME a su archivo de zona para myvendor.acme.com , señalando nuevamente a www.myvendor.com . Luego, en su IFRAME, configure la fuente utilizando su alias de nombre de host.
Otra solución podría ser que su Javascript establezca el src en una secuencia de comandos de redirección en su propio servidor (y, por lo tanto, dentro de su dominio). Su script simplemente redirigiría el IFRAME a la URL "correcta" con los mismos parámetros.
Lo que dijo BYK. Creo que lo que está pasando es que OBTIENE una URL que es demasiado grande para que la maneje IE. Me doy cuenta de que estás tratando de enviar variable llamada src, que probablemente sea muy larga, más de 4k. Me encontré con este problema antes, y este era mi código. Observe el comentario sobre IE. También observe que causa un problema con Firefox, que se aborda en otro comentario.
var autoSaveFrame = window.frames[''autosave''];
// try to create a temp form object to submit via post, as sending the browser to a very very long URL causes problems for the server and in IE with GET requests.
var host = document.location.host;
var protocol = document.location.protocol;
// Create a form
var f = autoSaveFrame.document.createElement("form");
// Add it to the document body
autoSaveFrame.document.body.appendChild(f);
// Add action and method attributes
f.action = protocol + ''//'' + host + "/autosave.php"; // firefox requires a COMPLETE url for some reason! Less a cryptic error results!
f.method = "POST"
var postInput = autoSaveFrame.document.createElement(''input'');
postInput.type = ''text''
postInput.name = ''post'';
postInput.value = post;
f.appendChild(postInput);
//alert(f.elements[''post''].value.length);
// Call the form''s submit method
f.submit();
Si le conviene, puede comunicarse entre sitios con identificadores de fragmentos. Puede encontrar un artículo aquí: http://tagneto.blogspot.com/2006/06/cross-domain-frame-communication-with.html
Intenta usar un método indirecto. Crea un FORMULARIO. Establezca su parámetro de acción en la url base que desea navegar. Establezca su método en POST. Establezca su objetivo en su iframe y luego cree los parámetros necesarios como entradas ocultas. Finalmente, envíe el formulario. Debería funcionar ya que funciona con POST.
Según la respuesta de Mike, la solución más fácil en su caso sería usar "ocultación de parámetros" para convertir todos los parámetros GET en una sola URL.
La forma más escalable sería que cada ''carpeta'' en la URL consistiera en el parámetro, luego una coma y luego el valor. Por ejemplo, usaría estas URL en su aplicación:
http://example.com/app/param,value/otherparam,othervalue
http://example.com/app/param,value/thirdparam,value3
Cuál sería el equivalente de estos:
http://example.com/app?param=value&otherparam=othervalue
http://example.com/app?param=value&thirdparam=value3
Esto es bastante fácil en Apache con .htaccess, pero parece que está usando IIS, así que le dejo a usted investigar la implementación exacta.
EDITAR: acabo de volver a esto y me di cuenta de que no sería posible implementar lo anterior en un dominio diferente si no lo posee: p Sin embargo, puede hacerlo del lado del servidor de esta manera:
- Configure el parámetro anterior oculto en su propio servidor como un script especial (puede no ser necesario si a IE no le importa GET del mismo servidor).
- En Javascript, crea la URL de aspecto estático a partir de los diversos parámetros.
- Haga que el script en su servidor use los parámetros y lea el URL externo y lo emita, es decir, obtenga el contenido del servidor. Esta pregunta puede ayudarte con eso.
Entonces su URL iframe sería:
http://yoursite.com/app/param,value/otherparam,othervalue
Y esa página leería y mostraría la URL:
http://externalsite.com/app?param=value&otherparam=othervalue