Smartphones (Android, iPhone, Windows Phones), l'horreur pour les développeurs Web qui codent à destination de ces mobiles, qui eux même peuvent avoir des navigateurs différents (gérant le HTML 4 et le 5 ou non, voir partiellement), avec du matériel divers tel que la présence de GPS, ce qui avec les résolutions d'écran différentes portent le nombre de combinaison à gérer au point du désespoir :)
Différents smartphones
- OS : Système d'exploitation
- Navigateur (WebKit, Safari, Internet Explorer, Opera, Firefox, Dolphin, ...)
- Résolutions
Exemples
- HTTP_X_WAP_PROFILE : http://www.htcmms.com.tw/Android/Co...
- HTTP_USER_AGENT : Mozilla/5.0 (Linux; U; Android 2.2; fr-fr; Desire_A8181 Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1
<rdf:Description rdf:ID="BrowserUA">
<rdf:type rdf:resource="http://www.openmobilealliance.org/tech/profiles/UAPROF/ccppschema-20021212#BrowserUA" />
<prf:BrowserName>Android Browser</prf:BrowserName>
<prf:BrowserVersion>0.6</prf:BrowserVersion>
<prf:FramesCapable>Yes</prf:FramesCapable>
<prf:HtmlVersion>4.0</prf:HtmlVersion>
<prf:JavaAppletEnabled>No</prf:JavaAppletEnabled>
<prf:JavaScriptEnabled>Yes</prf:JavaScriptEnabled>
<prf:JavaScriptVersion>1.5</prf:JavaScriptVersion>
<prf:PreferenceForFrames>Yes</prf:PreferenceForFrames>
<prf:TablesCapable>Yes</prf:TablesCapable>
</rdf:Description>
<rdf:Description rdf:ID="HardwarePlatform">
<prf:Model>HTC Desire A8181</prf:Model>
<prf:PixelAspectRatio>1x1</prf:PixelAspectRatio>
<prf:ScreenSize>480x800</prf:ScreenSize>
<prf:ScreenSizeChar>25x21</prf:ScreenSizeChar>
<mms:MmsMaxImageResolution>480x800</mms:MmsMaxImageResolution>
- HTTP_X_WAP_PROFILE : http://wap.sonyericsson.com/UAprof/...
- HTTP_USER_AGENT : Mozilla/5.0 (Linux; U; Android 2.3.3; fr-fr; SonyEricssonLT15i-o Build/3.0.1.A.0.150) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1
<rdf:Description rdf:ID="BrowserUA">
<rdf:type rdf:resource="http://www.openmobilealliance.org/tech/profiles/UAPROF/ccppschema-20021212#BrowserUA"/>
<!-- Browser Identification -->
<prf:BrowserName>Android Browser</prf:BrowserName>
<prf:BrowserVersion>2.3</prf:BrowserVersion>
<prf:DownloadableBrowserApps>
<rdf:Bag>
<rdf:li>application/vnd.android.package-archive</rdf:li>
</rdf:Bag>
</prf:DownloadableBrowserApps>
<!-- Capabilities -->
<prf:FramesCapable>Yes</prf:FramesCapable>
<prf:TablesCapable>Yes</prf:TablesCapable>
<prf:PreferenceForFrames>Yes</prf:PreferenceForFrames>
<prf:HtmlVersion>4.0</prf:HtmlVersion>
<prf:XhtmlVersion>1.1</prf:XhtmlVersion>
<!-- Applet / Script -->
<prf:JavaAppletEnabled>No</prf:JavaAppletEnabled>
<prf:JavaScriptEnabled>Yes</prf:JavaScriptEnabled>
<prf:JavaScriptVersion>1.5</prf:JavaScriptVersion>
</rdf:Description>
<rdf:Description rdf:ID="HardwarePlatform">
<prf:Model>LT15i</prf:Model>
<prf:PixelAspectRatio>1x1</prf:PixelAspectRatio>
<prf:ScreenSize>480x854</prf:ScreenSize>
<prf:ScreenSizeChar>44x32</prf:ScreenSizeChar>
<mms:MmsMaxImageResolution>1600x1200</mms:MmsMaxImageResolution>
Ressource
CSS
<link rel="stylesheet" media="screen and (min-width: 480px)" href="css/bigscreen.css" type="text/css" />
input[type=checkbox]
{
/* Double-sized Checkboxes */
-ms-transform: scale(2); /* IE */
-moz-transform: scale(2); /* FF */
-webkit-transform: scale(2); /* Safari and Chrome */
-o-transform: scale(2); /* Opera */
padding: 10px;
}
Ecran, détection résolution
function ecrire(texte) {
document.getElementById("out").innerHTML = document.getElementById("out").innerHTML + '<br>' + texte;
}
function displayScreen() {
ecrire(window.innerWidth + 'x' + window.innerHeight + ' window.innerWidth .innerHeight');
ecrire(screen.width + 'x' + screen.height + ' screen.width .height');
ecrire(window.screen.availWidth + 'x' + window.screen.availHeight + ' window.screen.availWidth .availHeight');
}
function updateOrientation(e) {
ecrire('orientationChanged ! window.orientation:' + window.orientation);
setTimeout("displayScreen()",20);
};
function updateResize(e) {
ecrire('resizeChanged ! ');
};
// Event listener to determine change (horizontal/portrait)
window.addEventListener("orientationchange", updateOrientation);
window.addEventListener("resize", updateResize);
ecrire('Votre résolution est de '+screen.width+'x'+screen.height + ' , la place dispo est : ' + window.screen.availWidth+'x'+window.screen.availHeight + ' et le viewport: ' + window.innerWidth+'x'+window.innerHeight);
ecrire('window.orientation:' + window.orientation);
ecrire('window.DeviceOrientationEvent:' + (window.DeviceOrientationEvent?'YES':'NO'));
ecrire('window.OrientationEvent:' + (window.OrientationEvent?'YES':'NO'));
var supportsOrientationChange = "onorientationchange" in window,
orientationEvent = supportsOrientationChange ? "orientationchange" : "resize";
ecrire('supportsOrientationChange:' + supportsOrientationChange);
ecrire('orientationEvent:' + orientationEvent);
ecrire('...now change something...');