Opera 10.61 (Linux), jQuery y entrada de archivo estilizada [Resuelto]

CSS:
 .button {
width: 193px; /* размеры кноки */
height: 62px;
margin: 14px 0px;
background: url(img/0309input.jpg);
overflow: hidden; /* поможет избежать выхода поля за границы кнопки */
position: relative; /* относительно этого блока будем позиционировать поле */
}
.button input {
height: 200px;
position: absolute; /* для более простого позиционирования поля */
top: 0; /* начальные координаты */
right: 0;
opacity: 0; /* само поле делаем прозрачным, чтобы показать фон кнопки */
filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0);
cursor: pointer;
font-size: 200px;
z-index: 5;
}
#filename {
z-index: 3;
position: absolute;
top: 6px;
left: 6px;
width: 184px;
height: 19px;
overflow: hidden;
}


HTML:
 Загрузить новое:
<div class="button">
<div id="filename"></div>
<input id="photo" type="file" name="photo" value=""/>
</div>


jQuery:
 $(document).ready(function(){
$("#photo").change(function() {
$("#filename").text($("#photo").val());
});
});


Ubuntu 10.04

Resultado en Opera 10.61



Resultado de Chrome



Resultado de Firefox



En realidad la pregunta: ¿DÓNDE Y WTF?

¿Qué es este C: \ fakepath y de dónde viene? Al mismo tiempo, las entradas de archivos comunes y no estilizadas en el Opera muestran la ruta completa correcta desde la raíz ...

UPD:
Solo revisé las computadoras con Win7, WinXP es el mismo.

UPD 2:
Hizo esto:
función str_replace (búsqueda, reemplazo, asunto) {
 return subject.split (search) .join (replace);
}

$ (& quot; # foto & quot;). cambiar (función () {
var newpath = str_replace ("C: \\ fakepath \\", & quot; & quot; $ (& quot; # photo & quot;). val ());
$ (& quot; # nombre de archivo & quot;). texto (newpath);
});

Funciona.
Sin embargo, sorprendido por la presencia de tal "guardia de seguridad-pribluda", o tal "herramienta de compatibilidad", no importa. No recuerdo cuántos sitios han usado este método de estilo de entrada ... ¿ahora es fakepath en todas partes? Hmm…

Respuestas
ben collier
Este es un protector de seguridad que se pega y se abre paso en nuevos navegadores. Su esencia es ocultar la ruta real en la máquina al archivo, ya que se puede conectar a través de JS. El problema es "basado en el navegador", no con secuencias de comandos. Si lo desea, puede emular la entrada del archivo en el JS simple, ver una de mis primeras publicaciones del blog, la personalicé allí y luego puede ocultar esta función.
¿Se puede acreditar un artículo? - k ri
Sería bueno establecer un vínculo previo al hecho de que esto es "seguridad de una pribluda", ya que lo que maillist dice algo completamente diferente. - bradford
No compartiré el enlace, porque cuando vi la falsificación, simplemente corrí a través de Google y tomé fotos de varios blogs. ¿Y por qué exactamente a la seguridad? La mitad de los blogs lo describieron + en el culo después de estas opciones Opciones de Internet & gt; Seguridad & gt; Zona correcta & gt; Nivel personalizado & gt; Varios también están en seguridad. - xglax
Miré el artículo - no, demasiado código.
Hizo esto:

 $("#photo").change(function() {
var newpath = str_replace("C:\fakepath\", "", $("#photo").val());
$("#filename").text(newpath);
});


Sin embargo, sorprendido por la presencia de tal "guardia de seguridad-pribluda", o tal "herramienta de compatibilidad", no importa. - jessica n
stephanie miller
www.w3.org/TR/html5/common-input-element-attributes.html#common-input-element-apis

nombre de archivo
Cabe señalar que la lista está vacía. Al configurarlo, debe lanzar una excepción INVALID_ACCESS_ERR.

Esto se hace por compatibilidad con, por ejemplo, interfaces web de enrutadores que solo entienden las rutas de Windows.
(IE8 (y, creo que, 9) se comporta de la misma manera que opera, por cierto)
Bueno, IE8 en Linux no será utilizado por nadie en su sano juicio como navegador ... Pero, ¿por qué el espectáculo de ópera gana en fakepath en lugar de la forma normal?
¿Y por qué las interfaces web de los enrutadores solo entienden las rutas de Windows? Por alguna razón, el mío entiende perfectamente a Linux (lo remarcho desde bajo Linux). - florivel
Porque no se trata de la plataforma, sino del hecho de que esta es la norma. - bradandrews
eileen jacob
El tipo de entrada = "archivo" estándar no puede tener el atributo "valor", de lo contrario, podría haber extraído el archivo de la máquina.
En realidad, está ahí:
 www.w3.org/TR/html401/interact/forms.html - wyrmia
archivo
Crea un control de selección de archivos. Los agentes de usuario pueden utilizar el valor del nombre de archivo inicial. - kelly korby