2012-06-06 11 views
5

Obecnie tworzę hybrydową aplikację mobilną (zobacz phonegap/cordova) dla iOS i Androida i zauważyłem przy aktualizacji adresu URL obrazu img.src (który często robię), że Żądanie http w Androidzie wygląda jak poniżej.Manipulowanie żądaniem http spowodowanym aktualizacją img.src

Mój problem polega na tym, że nie zawiera on wszystkich ważnych nagłówków Accept (Accept: /), więc serwer nie załaduje obrazu i zwróci (HTTP/1.1 406 Not Acceptable). Chrome/iOS uwzględnia ten nagłówek Accept w żądaniach http podczas aktualizowania adresu URL img.src.

Moje pytanie brzmi, czy istnieje sposób na dołączenie tego nagłówka lub wykonanie czegoś, co, które zawierałoby ten nagłówek dla kolejnych aktualizacji img.src?

Android żądania 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

Czy próbowałeś utworzyć nowy obraz zamiast aktualizowania atrybutu src oryginału? –

Odpowiedz

1

Spójrz na Google implementation obsłużyć problemy ze zgodnością dla wszystkich tych problemów. To jest z biblioteki zamknięcia, która jest kompatybilna z PhoneGap (przynajmniej tak mówią :)

Zasadniczo trzeba zmienić nagłówki żądania http. Natywny obiekt xhr ma metodę o nazwie setRequestHeader (param, value); co robi to, czego szukasz. Użyj remote debugging on Android, aby zobaczyć, jakie nagłówki zostały wysłane i gdzie.

Nie wiem, jakiej biblioteki używasz. Biblioteka zamknięcia Google pozwala ci przekazywać nagłówki żądań jako parametr obiektu do metody wysyłania instancji xhr (SEE THIS), więc to całkiem proste. O ile mi wiadomo, jQuery ma podobne zachowanie.

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