Pull to refresh

Некоторые особенности Wap — программирования

Reading time3 min
Views1.4K
Добрый день, уважаемые. Я предпочитаю читать топики, в которых освещены не некие абстрактные вещи, а их конкретное применение. Именно поэтому я хочу поделиться своим опытом, полученным при разработке wap-страницы на нашем проекте.
Наш проект базируется на .Net архитектуре. Поэтому вся серверная часть будет на C#.


Преамбула


В один прекрасный день на нашем проекте потребовалось сделать вап-страницу. Причем сделать 2 ее варианта — html и wml. Так как раньше подобными вещами я не занимался, то все было в новинку. Если я буду писать очевидные вещи — не ругайтесь, пожалуйста. Эта статья расчитана на тех, кто не верстает постоянно wap страницы, но иногда такая необходимость возникает.

Немного теории


Что такое html объяснять, думаю, не стоит :)
А вот на wml стоит немного остановиться. Несколько фактов об этом языке разметки:

  1. Страница начинается и заканичивается тэгом &lt wml &gt
  2. Вся информация заключается в тэги &lt card &gt
  3. Размер страницы не более 4кб
  4. Не поддерживает css
  5. Картинки только формата WBMP, то есть черно-белые

Подробнее на wiki
Фактически, wml уже нигде не используется. Наступило царствие xhtml :)

Практика. Клиентская часть


Первое, что я уяснил при верстке wap страничек — без доктайпа никуда.
Второе — некоторые телефоны отображают страницу только при полностью валидной верстке.

Как добиться, чтобы телефон отображал вашу уже сверстанную под маленькие экраны страницу?
Нужно чтобы она проходила валидацию!
А для этого нужно определение xml в начало документа. Исходя из личного опыта было выяснено, что если телефон не встречает в начале файла строку (и если этот телефон — Nokia :) )
&lt?xml version=«1.0» encoding=«UTF-8»?>

то показывать страницу он отказывается.

Дальше больше. Нужно указать доктайп.
Для html версии страницы я использовал
&lt!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.0//EN" «www.wapforum.org/DTD/xhtml-mobile10.dtd»>

А для wml
&lt!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"
«www.wapforum.org/DTD/wml_1.1.xml»>


Далее уже на ваш вкус, только соблюдая валидность верстки. Валидатор всего к вашим услугам.

Практика. Серверная часть


Как я уже писал, все примеры кода будут на C#.

Первая задача, которая встала передо мной — определить, wap браузер передо мной или нет.
Я написал следующее:
   bool WapBrowser=Request.Headers[«Accept»].Contains(«text/vnd.wap.wml»);

Далее определяем поддерживает, ли наш браузер xhtml
   bool SupportHTML = Request.Headers[«Accept»].Contains(«text/html»);

Тут тоже все понятно.

Теперь можно построить несколько условий:

if(SupportHTML && WapBrowser)
{
   try
    {
      Server.Transfer(«SampleWapPage.aspx»);
     }
    catch (Exception ex)
    {
       //
     }
    Server.Transfer(«404.aspx»);
}

Как видно, если браузер клиента — wap браузер и он поддерживает html — происходит переход на SampleWapPage.aspx

А если условие не выполняется, просто пытаемся определить wap браузер:

if(WapBrowser)
{
   try
    {
      Server.Transfer(«SampleWapPage.aspx?wml»);
     }
    catch (Exception ex)
    {
       //
     }
    Server.Transfer(«404.aspx»);
}

Как видите, все просто и наглядно.
Удачи в использовании :)
Tags:
Hubs:
Total votes 16: ↑12 and ↓4+8
Comments17

Articles