2012-06-06 5 views
5

Actualmente estoy creando una aplicación móvil híbrida (ver phonegap/cordova) para iOS y Android, y noté cuando actualicé la url img.src de una imagen (que hago frecuentemente) que el La solicitud de Android para Android se ve a continuación.Manipulación de la solicitud HTTP causada por la actualización de img.src

Mi problema es que no incluye el encabezado Aceptar todo importante (Aceptar: /) por lo que el servidor no puede cargar la imagen y devuelve (HTTP/1.1 406 no es aceptable). Chrome/iOS incluyen este encabezado Aceptar en sus solicitudes http al actualizar la url img.src.

Mi pregunta es, ¿hay alguna manera de agregar este encabezado o hacer algo que incluiría este encabezado para las posteriores actualizaciones img.src?

Android petición HTTP:

GET /system/data/ba9320b8-e093-47a9-8858-c6343febf3ec/frame?t=1339017043002 HTTP/1.1 
Host: MyHostName 
Connection: keep-alive 
User-Agent: Mozilla/5.0 (Linux; U; Android 4.0.2; en-us; Galaxy Nexus Build/ICL53F) 
AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30 
Accept-Encoding: gzip,deflate 
Accept-Language: en-US 
Accept-Charset: utf-8, iso-8859-1, utf-16, *;q=0.7 
Cookie: auth_token=0882f24f-04d7-4f05-9475-cfe2a94af5bf 
+0

¿Ha intentado crear una nueva imagen, en lugar de actualizar el atributo src del original? –

Respuesta

1

Tome un vistazo a la Google implementation para manejar los problemas de compatibilidad para todos estos problemas. Esto es desde el interior de la Biblioteca de Cierre, que es compatible con PhoneGap (al menos eso dicen :)

Básicamente lo que necesita hacer es alterar los encabezados de la solicitud http. Un objeto nativo xhr tiene un método llamado setRequestHeader (param, value); que hace lo que estás buscando. Use remote debugging on Android para ver qué encabezados se enviaron y dónde.

No sé qué biblioteca está utilizando. La Biblioteca de cierres de Google le permite pasar los encabezados de solicitud como un parámetro de objeto al método de envío de una instancia xhr (SEE THIS), por lo que es bastante fácil. Por lo que sé, jQuery tiene un comportamiento similar también.

$.ajax({ 
     url: "http://someurl", 
     data: { signature: authHeader }, 
     type: "GET", 
     beforeSend: function(xhr){xhr.setRequestHeader('X-Test-Header', 'test-value');} 
     success: function() { alert('Success!' + authHeader); } 
     }); 
Cuestiones relacionadas