5

Tenemos algunas páginas HTML (locales, no en un servidor web) que usan el elemento BASE para identificar un directorio base específico que contiene un grupo de hojas de estilo e imágenes comunes. Aquí hay un ejemplo (página se almacena en c: \ temp \ html \ test.html, directorio de recursos es c: \ temp \ resources):Faltan hojas de estilo/guiones/imágenes al usar el elemento BASE para un archivo html local renderizado en IE8 en el modo estándar IE8

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html> 
    <head> 
     <base href="file:///c:/temp/resources/"></base> 
    </head> 
    <body> 
     <p><img src="image.jpg" /></p> 
    </body> 
</html> 

Eso funciona bien en todos los navegadores actuales que he probado (Firefox, Chrome, IE9) y funciona bien en IE8 en modo Quirks. Pero en IE8 ejecutándose bajo el modo de estándares IE8 (el valor predeterminado para esta página, y en las páginas reales es el modo requerido), cualquier hoja de estilo, script o referencias de imagen se rompen; es como si el elemento se ignorase por completo.

He intentado otras variaciones en el elemento - <base href="file:///c:/temp/resources/"> o <base href="file:///c:/temp/resources/"/>, así como todo tipo de archivos URL diferentes, p. Ej. file: /// c: /temp/resources/test.html etc. y también hrefs relativos para la base pero nada parece convencer a las imágenes/hojas de estilo/scripts para que se carguen.

Sé que el ejemplo anterior parece trivial, pero en nuestro caso real tenemos que cargar páginas en IE8 bajo el modo estándar IE8 y tenemos que establecer un específico, así que estoy tratando de encontrar una solución si hay una .

Encontré algunas referencias a un error en las primeras versiones de IE8 relacionadas con el elemento, pero están marcadas como correcciones hace bastante tiempo y estoy probando esto en una VM limpia de Windows 7 con todas las actualizaciones de IE8 aplicadas.

+0

Muchas gracias, comentarios a continuación. – fubaar

Respuesta

9

Actualización de estado:     Uso: <base href="\\c:\temp\resources\" />

Este es el proceso que utilicé en la creación de esta solución para permitir IE8 utilizar el atributobase para archivos locales.

Para aclarar: Este W3C solución validada trabaja para IE7, IE8 y todos los navegadores modernos !


Referencia Captura de pantalla::
Aquí se puede ver que IE8 Barra de direcciones no funciona igual que los otros navegadores modernos: Las barras son invierte y no hay file:/// protocolo visto . Sin embargo, IE8 mostrará el protocolo file:/// en la barra de estado del navegador al actualizar la página.

enter image description here

Referencia Captura de pantalla:
Desde IE8 es el tratamiento de archivos locales de manera diferente, la comprensión del protocolo de
IE8 para file:/// es importante.

Para darse cuenta de lo que se dispone de métodos de sintaxis, ver Opciones de Internet (Tab) Seguridad paraIntranet local nos dará esa información. No hubo cambios se hacen realmente aquí, sólo la sintaxis favor:

enter image description here

En la foto superior, la ventana de Intranet local confirma que se requieren barras invertidas.

Además, muestra que el protocolo file:\\ se asocia con este barra sintaxis. Desde file:/// el protocolo es implícito automáticamente por IE8 (anteriormente mencionado: vea la barra de estado del navegador y las barras de notas se vuelven correctas !!).

La definición de este protocolo file: en la etiqueta Base es el problema. ¡La solución es para no utilizar un protocolo!


Referencia Link 1:Protocol-less URL Scheme:

No es exactamente la lectura ligera, pero ofrece section 4.2 of RFC 3986 de direcciones URL completas que omiten el protocolo (HTTP o HTTPS) por completo. Cuando se omite el protocolo de una URL, el navegador utiliza el protocolo del documento subyacente en su lugar.


Reference Enlace 2:Understanding Network Path Reference by Paul Irish:

* Por supuesto, si estás viendo el archivo localmente, se va a tratar de solicitar el archivo con el protocolo file://.


las referencias anteriores explican que el uso de // permitirá que cualquier navegador para utilizar el actualmente conocido URL régimen de al acceder a archivos o activos.Desde IE8 es el cambio de juego, utilizando \\ en lugar de // trabajará para la etiqueta de base ya que todos los navegadores convertir/interpretarlo como el esquema de URL file:/// estándar (archivos locales implicados), incluido el navegador de IE7!


Marcado HTML completo | La demo de trabajo:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
    <title>Using Base Tag with Local Files IE8 and Modern Browser DEMO</title> 

    <!-- The name of this file is: test.html --> 
    <!-- The location of this HTML file on the hard drive is: C:\temp\html\test.html --> 

    <!-- This unusually constructed Base attribute tag uses two rules to have it work for Locally Hosted IE8 Files that are not server based. --> 
    <!-- First, the "URL Scheme" is based on "Network Path Reference" which means no Protocol is used. --> 
    <!-- Second, the "forward slashes" are changed to "back slashes". It's the syntax IE8 actually expects. --> 
    <!-- This entire method is also friendly for modern browsers showing these local files that are not server based. --> 
    <base href="\\c:\temp\resources\" /> 

</head> 
<body> 

    <p> 
    <!-- The location of this "image.jpg" on the hard drive is at: C:\temp\resources\image.jpg --> 
    <img src="image.jpg" alt="image" /> 
    </p> 

</body> 
</html> 
+0

@fubaar, he reescrito mi respuesta para ofrecerle una solución, explicación detallada y trabajo [** HTML Demo **] (http://pastebin.com/wXUdqRG0) que valida. ¡Aclamaciones! – arttronics

+0

Esto es un gran detalle, ¿cómo lo supiste? – ryandenki

+0

@ryandenki, hace mucho tiempo utilicé 'C: \ website \ project (ver1) \ index.html' que funciona correctamente en todos los navegadores ** excepto ** IE8 para pruebas locales. Resulta que en IE8, algunos de mis CSS fueron ignorados. Soluciono el problema al descubrir que utilicé un * carácter * ilegal para la ruta de la carpeta que otros navegadores estaban felices de ignorar, por lo tanto no hay más '(' o ')'. Fue entonces cuando aprendí que las rutas de IE8 para los archivos locales y las carpetas son muy diferentes y trato ese tema con gran escrutinio. – arttronics

0

Desafortunadamente, parece que el modo de estándares de IE8 no maneja el archivo: // URI en el elemento BASE.

Si puede ejecutar secuencias de comandos dentro de sus páginas locales, le sugiero que use algunos javascript simples para recorrer todos sus elementos externos (SCRIPT, IMG, LINK, IFRAME, FRAME) y arreglar cualquier URI sin esquema (los que no contienen ": //") usando su BASE deseada.

+0

Gracias por la respuesta. Como se menciona en la publicación, este problema es específico del modo de estándares IE8. La ejecución de una secuencia de comandos personalizada no va a funcionar en nuestro escenario, lamentablemente, necesitamos que la base se establezca correctamente para que el contenido de la página agregado dinámicamente, las referencias de secuencia de comandos a las URL relativas, etc. funcionen como se esperaba. – fubaar

Cuestiones relacionadas