IE mobile verweigert Anzeige
Deus Figendi
- browser
0 Ingo Turski0 DF
Also eigentlich hätte ich den Thread auch gleich noch unter "HTML/XHTML" und "PHP" einordnen können...
Folgendes: Vor einiger Zeit kam mir die geniale Idee für meine Seite einen WAP-Zugang zu basteln. Zwecks hoher Kompatibilität entschied ich mich für den alten WML 1.1 Standard, weil ich der Meinung war dass das eigentlich alle mobilen Endgeräte können müssten. Tja, falsch gedacht, einer der Benutzer meinte er könne die Login-Schaltfläche nicht anklicken (nur als Text dargestellt). Er benutzt den InternetExplorer Mobile und der kommt scheinbar nicht mit <anchor> zurecht.
Naja dachte ich mir, das Ding ist wahrscheinlich so ein supermodernes Teil, das so alte Standards einfach nicht mehr unterstützt, aber es gab da doch dieses WML 2.0. Schnell bemerkte ich, dass WML 2.0 das Selbe ist wie XHTML MP (Mobile Profile). Prima, mit XML und XHTML hatte ich schon ein paar Erfahrungen gemacht, sollte also nicht so schlimm werden...
Kurzum es war eine Heidenarbeit aber es ist mir gelungen und stolz präsentierte ich den neuen WAP-Zugang. Ich hatte mich entschieden beides zu unterstützen und programmierte den Zugang so:
if (strpos($_SERVER['HTTP_ACCEPT'],'text/vnd.wap.wml') != False) { include('wap1_index.php'); }
elseif (strpos($_SERVER['HTTP_ACCEPT'],'application/xml') != False) { include('wap2_index.php'); }
für nicht-php-Menschen: "Schau welchen Datentyp der Browser versteht und schicke ihn entsprechend zu wml1 bzw wml2"
Tja Pustekuchen, der IE mobile gibt als einzigen MIME-Typ folgenden an: */*
Ja super, damit kann ich viel anfangen, also als Notlösung noch 'was angehängt:
if (strpos($_SERVER['HTTP_ACCEPT'],'text/vnd.wap.wml') != False) { include('wap1_index.php'); }
elseif (strpos($_SERVER['HTTP_ACCEPT'],'application/xml') != False) { include('wap2_index.php'); }
else {
$i = rand(1,2);
include('wap'.$i.'_index.php');
}
("und wenn er weder wml1 noch wml2 angibt schicke ihn zufällig auf eine von beiden").
Außerdem sagte ich ihm er solle falls es nicht klappt die Seite einfach mehrfach aufrufen bis die richtige kommt.
Tja, das hat auch mehr oder weniger funktioniert, wie erwartet konnte er das WML 1.1-Teil nicht bedienen, aber bei XHTML MP... *will er die Datei herunterladen*
So meine These ist folgende:
Ich liefere (logischerweise) die WAP 1 - Seite mit text/vnd.wap.wml aus und die XHTML MP mit application/xml. Leider scheint es so, dass dieser Browser application/xml als Download-Daten ansieht, er versucht also die Datei zu speichern anstatt zu lesen. Nur weiß ich leider nicht weiter, wenn ich es mit einem andere MIME-Typ ausliefere ist es nicht mehr valide... gibt es vieleicht eine Client-Seitige Lösung? Kann man dem Browser erklären, dass er das gefälligst parsen soll? Oder hat jemand einen anderen Lösungsvorschlag?
Hi,
if (strpos($_SERVER['HTTP_ACCEPT'],'text/vnd.wap.wml') != False) { include('wap1_index.php'); }
elseif (strpos($_SERVER['HTTP_ACCEPT'],'application/xml') != False) { include('wap2_index.php'); }
das ist unsicher. Was ist, wenn einer der Strings am Anfang steht? Du fragst auf != 0 ab...
> Leider scheint es so, dass dieser Browser application/xml als Download-Daten ansieht, er versucht also die Datei zu speichern anstatt zu lesen.
Das macht er wohl genauso wie der normale IE. Die Lösung dürfte dieselbe sein: gebe ihm den Mime-Typ, den er versteht.
freundliche Grüße
Ingo
--
[[barrierefreie Webseitenerstellung](http://www.1ngo.de/web/) » [Suchmaschinenoptimierung](http://www.1ngo.de/web/seo.html) | [em?](http://www.1ngo.de/web/em.html)] ([Hommingberger Gepardenforelle](http://www.1ngo.de/hommingberger-gepardenforelle/);-)
Hi
das ist unsicher. Was ist, wenn einer der Strings am Anfang steht? Du fragst auf != 0 ab...
Nö, ich frage != False ab, nicht != 0. Laut php.net wird False zurück gegeben wenn der Suchstring nicht gefunden wurde.
Das macht er wohl genauso wie der normale IE. Die Lösung dürfte dieselbe sein: gebe ihm den Mime-Typ, den er versteht.
Schade, damit gebe ich mein schönes "valid" auf. Ich schreib' noch 'ne Mail an den Hersteller des Browsers :-D
Aber schönen Dank, bye
Hi,
Nö, ich frage != False ab, nicht != 0. Laut php.net wird False zurück gegeben wenn der Suchstring nicht gefunden wurde.
Und wenn der String am Anfang gefunden wird, gibt PHP 0 zurück - genau das, nämlich != 0, fragst Du jedoch ab, da in php 0 für false steht. Eine Abfrage auf false geht anders, funktioniert allerdings nicht in älteren PHP-Versionen. Wenn Abwärtskompatibilität gefragt ist, bietet sich die umgekehrte Abfrage auf === false ; else an.
freundliche Grüße
Ingo
»da in php 0 für false steht.
Ok, werden mir den Tipp zu Herzen nehmen, danke.
Allerdings hat die andere Sache leider nicht funktioniert. Ich habe ein Abfrage eingebaut, die bevor sie den Header-Content-Type setzt noch schnell den Client abfragt (prüft ob MSIE vorkommt) und im Falle dessen einen anderen MIME-Type ausgibt. Das hat leider nicht geholfen.
Also ursprünglich hatte ich ja application/xml gedacht...
dann habe ich application/xhtml+xml probiert und text/xml und sogar text/xhtml+xml (was es glaube ich gar nicht gibt) in meiner Verzweiflung habe (vollkommen unlogisch) sogar text/html getestet... alles mit meinem normalem IE 6.x aber da ich ja valides XHTML MP geschrieben habe (bzw. generiere) hat das alles nichts gebracht, der IE erkennt es korrekt als XML (mit Namensräumen etc) und stellt den XML-Baum da anstatt das XHTML MP zu parsen (wie es beim IE mobile ist kann ich nicht sagen). Das einzige was mir dann noch einfiehle wäre einen anderen DOCTYPE anzugeben, derzeit ist das nämlich
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.0//EN"
"http://www.openmobilealliance.org/tech/DTD/xhtml-mobile10.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
(...)
</html>
naja, wahrscheinlich werde ich dann einen dritten WAP-Zugang programmieren müssen, der klassisches HTML (3 oder 4) unterstützt.
Es sei denn du (oder jemand andere) kommt noch mit einer anderen Idee um die Ecke... wie auch immer, schönen Dank für die Mühen und die False == 0 Sache werde ich dann auch mal korrigieren.