Приглашение пользователю на выбор типа приложений
Рисунок 24.1. Приглашение пользователю на выбор типа приложений
Рассмотрение Both.hdml
Рассмотрение Both.hdml
Если браузер пользователя поддерживает и WML, и HDML (сценарию известно обэтом, так как обеим переменным, $WAPhdml и $WAPwml, присвоены значения), сценарий index.cgi загружает HDML-страницу Both.hdml, которая отображает меню,позволяющее пользователю выбирать или WML-, или HDML-приложения. HDML-страница Both.hdml реализуется с помощью следующего программного кода:
<HDML Version=3.0 Markable=True TTL=0>
<Choice Name=select Method=Alpha>
<Center>Select HDML/WML
<CE Task=GO Dest=Demos.hdml>HDML Demos <CE Task=GO Dest=Demos.wml>WML Demos
</Choice>
</HDML>
В данном случае, так как браузер поддерживает как WML, так и HDML, приложениемогло бы использовать любой из этих языков для реализации простой страницы.Как вы можете видеть, в зависимости от выбранной пользователем опции меню,страница загружает HDML- или WML-страницы.
Представленные в данной книге приложения написаны для автономного функционирования и отличаются от варианта, когда приложения запускаются с помощью опций меню. При запуске приложений сwaplib.com вы обнаружите, что после завершения приложений не происходит возврата в основное меню. Чтобы упростить работу с несколькими приложениями, можно маркировать основное меню (и каждое приложение). Данное свойство позволяет использовать функциюзакладок (Bookmark), существующую у вашего телефона, для маркировки основного меню (или любого из приложений) с тем, чтобы можно было легко вернуться в основное меню, воспользовавшись менюзакладок телефона.
Рассмотрение Demos.hdml
Рассмотрение Demos.hdml
Если браузер пользователя поддерживает только HDML (сценарию известно обэтом, так как переменной $WAPhdml присвоено значение, а переменной $WAPwmlзначение не присвоено), сценарий index.cgi будет загружать HDML-страницу
Demos.hdml, которая отображает меню приложений, написанных на HDML. HDML-страница Demos.hdml реализуется с помощью следующего программного кода:
<HDML Version=3.0 Markable=True TTL=0>
<Choice Name=select Method=Alpha>
<Center>Select Demo (HDML)
<CE Task=GO Dest=WorldTime/WorldTime.hdml>World Time <CE Task=GO Dest=SkiConditions/SkiConditions.hdml>Ski Conditions <CE Task=GO Dest=MovieGuide/MovieGuide.hdml>Movie Guide <CE Task=GO Dest=CurrencyConvert/CurrencyConvert.hdml>Currency Converter <CE Task=GO Dest=SmartHouse/SmartHouse.hdml>Smart House <CE Task=GO Dest=StockQuote/StockQuote.hdml>Stock Quotes <CE Task=GO Dest=PhoneBook/PhoneBook.hdml>Phone Book <CE Task=GO Dest=WapPage/WapPage.hdml>Wap Page <CE Task=GO Dest=WapMail/WapMail.hdml>WAP Mail <CE Task=GO Dest=FlightSchedule/FlightSchedule.hdml>Flight Schedule <CE Task=GO Dest=PackageTracker/PTracker.hdml>Package Tracker <CE Task=GO Dest=MortgageCalc/MortgageCalc.hdml>Mortgage Calculator <CE Task=GO Dest=Weather/Weather.hdml>Weather Info <CE Task=GO Dest=CatalogOrder/CatalogItem.hdml>Catalog Order <CE Task=GO Dest=RestaurantCall/RestaurantCall.hdml>Restaurant-Call <CE Task=GO Dest=RestaurantRes/RestaurantRes.hdml>Restaurant-Res <CE Task=GO Dest=HotelInfo/HotelInfo.hdml>Hotel Info <CE Task=GO Dest=YellowPages/YellowPages.hdml>Yellow Pages <CE Task=GO Dest=RealEstate/RealEstate.hdml>Real Estate Listings
</Choice>
</HDML>
В соответствии с тем же форматом, который используют и другие HDML-приложения данной книги, первый элемент сообщает браузеру (или другим программистам) информацию о версии спецификации HDML, поддерживаемой приложением. Параметр Markable=True определяет, что браузер может устанавливать на HDML-странице закладку, а параметр тть=0 предписывает браузеру не выполнять кэширование HDML-страницы. Для отображения и обработки опций меню, выбранных пользователем, в программном коде приложения используетсяэлемент <Choice>.
Рассмотрение приложения Demos.wml
Рассмотрение приложения Demos.wml
Если браузер пользователя поддерживает только WML (сценарию известно обэтом, так как переменной $WAPwml присвоено значение, а переменной $WAPhdmlзначение не присвоено), сценарий index.cgi будет загружать WML-страницуDemos.wml, которая отображает меню приложений, написанных на WML. WML-страница Demos.wml реализуется с помощью следующего программного кода:
<?xml version="1.0"?> <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
<head>
<meta http-equiv="Cache-Control" content="max-age=0" forua="true"/>
</head>
<card id="select" title="Demos">
<p align="center" mode="wrap"> Select Demo (WML) </p>
<p align="left" mode="nowrap">
<select> <option onpick="WorldTime/WorldTime.wml">World Time</option> <option onpick="SkiConditions/SkiConditions.wml">Ski Conditions< /option> <option onpick="MovieGuide/MovieGuide.wml">Movie Guide</option> <option onpick="CurrencyScript/CurrencyScript.wml">Currency Script</option> <option onpick="SmartHouseScript/SmartHouseScript.wml">Smart House Script</option> <option onpick="StockQuote/StockQuote.wml">Stock Quotes</option> <option onpick="PhoneBook/PhoneBook.wml">Phone Book</option> <option onpick="WapPage/WapPage.wml">Wap Page</option> <option onpick="WapMail/WapMail.wml">WAP Mail</option> <option onpick="FlightSchedule/FlightSchedule.wml">Flight Schedule</option> <option onpick="PackageTracker/PTracker.wml">Package Tracker</option> <option onpick="MortgageCalc/MortgageCalc.wml">Mortgage Calculator</option> <option onpick="Weather/Weather.wml">Weather Info</option> <option onpick="CatalogOrder/CatalogItem.wml">Catalog Order</option> <option onpick="RestaurantCall/RestaurantCall.wml">Restaurant- Call</option> <option onpick="RestaurantRes/RestaurantRes.wml">Restaurant- Res</option> <option onpick="HotelInfo/HotelInfo.wml">Hotel Info</option> <option onpick="YellowPages/YellowPages.wml">Yellow Pages</option> <option onpick="RealEstate/RealEstate.wml">Real Estate Listings</ option> <option onpick="SmartHouse/SmartHouse.wml">Smart House</option> <option onpick="CurrencyConvert/CurrencyConvert.wml">Currency Converter</option> <option onpick="MortgageScript/MortgageScript.wml">Mortgage Script</option> <option onpick="SlotMachine/SlotMachine.wml">Slot Machine</option> </select>
</p>
</card>
</wml>
В соответствии с форматом любого из WML-приложений, представленных в данной книге, первые два элемента WML-страницы сообщают WAP-браузерам версиюWAP-спецификации, которую поддерживает приложение. Элемент <meta> позволяет указывать для WML-страницы метаинформацию. В нашем случае параметрhttp-equiv=Cache-Control сообщает WAP-браузеру, что данная часть мета-информации относится к системе кэширования памяти. Аналогично, параметрcontent=max-age=0 сообщает браузеру, что максимальное время, в течение которого должно выполняться кэширование WML-страницы, равно нулю секунд; тоесть, браузер должен не запоминать, а повторно загружать данные с сервера каждый раз, когда поступает запрос. Для данной книги нулевое значение было выбрано, чтобы помочь читателю в разработке программы. При выборе нулевогозначения каждый раз, когда происходит изменение, это изменение передается нателефон. В реально эксплуатируемом приложении статическое меню, подобноерассматриваемому здесь, по-видимому, должно использовать интервал хранения,установленный по умолчанию, равным 30 дням. Наконец, параметрforua="true" определяет, что данное значение Cache-Control предназначенодля телефона и не должно удаляться каким-либо промежуточным агентом.
Для отображения и обработки пунктов меню в программном коде используетсяэлемент <select>. Когда пользователь выбирает какое-то конкретное приложение, элемент select (Выбор) предписывает браузеру загрузить страницу приложения из соответствующего каталога.
Рассмотрение приложения waplib.com
Рассмотрение приложения waplib.com
При запуске приложения waplib.com выполняется Peri-сценарий index.cgi, чтобы установить тип браузера пользователя. Тип браузера определяется путем анализазначения параметра НТТР_АССЕРТ, получаемого от браузера, запрашивающего сервис. Сценарий index.cgi реализуется с помощью следующего программного кода:
#!/usr/bin/perl
$WAPwml = ""; $WAPhdml = "";
$accept = $ENV{"HTTP_ACCEPT"};
if ($accept =~ /wml/) { $WAPwml = "wml"; }
if ($accept =~ /hdml/) { $WAPhdml = "hdml"; }
if (($WAPwml eq "") && ($WAPhdml eq "")) { print "Location: http://www.waplib.com/WebStart.html\n\n"; }
elsif (($WAPwml eq "wml") && ($WAPhdml eq "")) { print "Location: http://www.waplib.com/Demos.wml\n\n"; }
elsif (($WAPwml eq "") && ($WAPhdml eq "hdml")) { print "Location: http://www.waplib.com/Demos.hdml\n\n"; }
else { print "Location: http://www.waplib.com/Both.hdml\n\n"; }
Приложение использует функцию $ENV для выборки значения переменнойНТТР_АССЕРТ. Затем программа выполняет проверку, чтобы определить, включает лизначение переменной буквы wml. При положительном результате (когда буквы wmlприсутствуют), программный код присваивает значение wml переменной $WAPwml,которую позже он может проверить с помощью конструкции условного перехода if.Далее выполняется аналогичная проверка в отношении букв hdml. Если ни переменной $WAPwml, ни переменной $WAPhdml не присвоены значения, то это означает, чтобраузер не поддерживает ни WML, ни HDML, вследствие этого приложение запускаетHTML-файл WebStarthtml, отображающий сообщение о скором выходе книги «WAP вдействии. Доступ к Интернет-сайтам через сотовый телефон».
Заметьте, что сценарий запускает WML-, HDML- или HTML-файлы просто путем печати слова Location (Адрес), за которым следует требуемый URL. Когда браузервстречает URL в таком формате, он совершает ветвление, переходя на соответствующий адрес.
В реальном приложении ваш HTML-сайт, вероятно, будет выполнять обработкуданных, связанную или не связанную с WML- и HDML-сайтами. HTML-файлWebStart.html содержит следующий программный код:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html> <head> <title>WAPLIB</title> </head>
<body> <div align="center"><h1>Wireless Applications Programmer's Library</h1></div><br> <div align="center"><h2>Coming soon</h2></div>
</body> </html>