// Even more cache disabling
<meta forua="true" http-equiv="Cache-Control" content="must-revalidate"/>
</head>
<card id="init" title="CookieTest">
<p>
Cookie "TestCookie" was <?echo($cookieset)?>.
Value is currently "<?echo($cookieid)?>"
</p>
<p>
<anchor>
Increase value
<go method="get" href="<?echo($PHP_SELF)?>?random=<?echo($random)?>"/>
</anchor>
</p>
<p>Gateway:
<?
if(isset($HTTP_VIA))
{ // Is there something in the HTTP_VIA variable?
echo($HTTP_VIA);
}
else {
if(isset($HTTP_USER_AGENT))
{ // Is there something in the HTTP_USER_AGENT variable?
echo($HTTP_USER_AGENT);
}
else {
// Absolutely no identifier was found
echo("Unknown");
}
}
?>
</p>
</card>
</wml>
47. 如何使用WAP设备发送E-Mail?
在HTML中有一个默认的E-Mail机制:“ mailto:” 。但在WML中不好使,因此E-Mails必须通过WML表单来解决。例如:
<wml>
<card id="edit" title="Email Editor">
<p>From: <input type="text" name="from" format="*M"/></p>
<p>To: <input type="text" name="to" format="*M"/></p>
<p>Subject: <input type="text" name="subject" format="*M"/></p>
<p>Message body: <input type="text" name="body" format="*M"/></p>
<p>
<anchor>Send this mail
<go method="post" href="http://some.host/mailhandler"?action=send/">
<postfield name="from" value="$(from)"/>
<postfield name="to" value="$(to)"/>
<postfield name="subject" value="$(subject)"/>
<postfield name="body" value="$(body)"/>
</go>
</anchor>
</p>
</card>
</wml>
在代码中的http://some.host/mailhandler是一个CGI程序,它是服务端的脚本程序,将提交的表单转换成E-Mail格式并发送出去。
如果想使用一个类似于发信的过程,就需要编辑变量名。另外发送的数据是有限的,长信息可能需要打断。
为了演示它是如何工作的,下面的 PHP 脚本可以用来处理Mail。它将格式化WML页面,告诉用户是否发出信件。在真实的应用中,应该加入检测,例如:E-Mail的合法格式。
<?
// Tell the client that this is a WML deck
header("Content-type: text/vnd.wap.wml");
echo("<?xml version="1.0"?>n");
echo("<!DOCTYPE wml PUBLIC "//WAPFORUM//DTD WML 1.1//EN"
"http://www.wapforum.org/DTD/wml_1.1.xml">n");
// The name of your mail server
$mailer = "wap.colorline.no";
// Format the from field
$from = $from." (WAP user at ".$mailer.")";
// Add the from field and some character handling to the extra headers
$extraheaders = $from."nContent-Type: text/plain;
charset=iso-8859-1nContent-Transfer-Encoding: 8bit";
// Start sending out the WML deck
echo("<wml>n");
if(mail($to,$subject,$body,$extraheaders))
{// Use PHP''s internal mail functionality
// Mail was successfully sent
echo("<card id="sent" title="Mail sent">n");
echo("<p>Mail was sent successfully</p>n");
echo("</card>n");
}
else {
// The mail could not be sent
echo("<card id="notsent" title="Mail failed">n");
echo("<p>Unable to send mail</p>n");
echo("</card>n");
}
echo("</wml>n");
?>
因为安全性的原因,以上的代码没有演示程序。
48. 可以在模拟器上操作本地的页面,却没有办法访问Internet上的,有什么问题吗?
大多数模拟器和工具都可以浏览Internet、Intranet和本机的页面。但是在访问一些大公司页面的时候,必须通过代理服务器来取得进入Internet的权限。如果必须通过这个代理服务器来取得HTML页面,那么你的WAP模拟器也会取得权限来访问Internet。
注意到有些模拟器不支持代理服务器,但是大多数是支持的。在模拟器里面设置这些是很简单的。用户所做的只需要将代理主机的名字、IP地址和端口号输入就可以了。如果没有找到,你可以在 systems/network 管理器里面设置这些,也可以检查 Netscape/IE的设置。
在某些情况下,代理服务器使用 userid 和 password 来取得进入Internet的权限。有些模拟器支持用户代理服务器,用户应该能告诉模拟器相关的代理配置。
在极少的情况下,使用代理服务器(如Microsoft Proxy Server,)的用户会遇到更多的问题。这个代理服务器只接受一种验证方式(userid/password)。这种验证被称做 NTLM ,并且是某种 MS 的验证方式。几乎很少有模拟器支持这种方式。因此最好是避免使用它,或者让管理员使用“Basic Authentication”方式以避免更多的麻烦。
49. 什么是PUSHing,它是如何工作的?
PUSH被加入到WAP 1.2,而且只在WAP 1.2中才存在。简单地来说,PUSH提供了另外一种从服务器向用户发送数据的方式。PULLing是从客户端请求信息,然后接收它;PUSH意味着服务器可以向用户发送数据,而不需要用户来请求。
内容或者应用服务器无法向用户代理直接发送数据,必须使用一种叫做Push Proxy 的网关。PPG 是基于Internet的Push Initiator (内容或者应用服务器) 与移动用户之间的。在Internet一边,使用Push Access Protocol,在移动网络一边使用Push Over-the-Air Protocol。
当前只有 WAP 1.2 开发平台支持 PUSH, 例如 Nokia Toolkit 2.0。 Nokia Toolkit 2.0 only 内部支持PUSHing,意味着用户可以从工具包的界面将消息推送到模拟器。如果想试着到一个外部的Push Proxy Gateway, 工具包就崩溃了。从readme文件中知道,PUSHing 还没有经过完整的测试。
50. WAP模拟器说text/html不支持,但是用户的MIME设置是正确的,为什么?
当使用服务端的脚本语言,例如ASP、PHP或者Perl,来生成WML输出,或者从HTTP服务器提供WML页面的时候。记住HTTP一般默认的显示是HTML,其MIME类型是text/html。
如果HTTP服务器或者服务器脚本有错误,错误的信息将使用HTML显示,因此微型浏览器是不能显示错误信息的。
一个开发工具/模拟器可以让用户看到从HTTP服务器过来的代码。例如,在Nokia SDK中,这个功能被称做View Source。通过看代码可以知道HTTP服务器到底发送了些什么内容。也可以使用普通的浏览器来查看任何HTML格式的错误信息。
51. 在哪儿有Visio移动电话的模板库?
目前唯一知道的就是它包含在 Nokia 7110 中。
52. 有没有其他有用的WML内容服务列表?
这里至少有一个。
对于Unix用户, http://pwot.co.uk/wml/中有Thomas Neill (ponder@pwot.co.uk)提供的WML工具,包括WML二进制编译和反编译。
Angus 和 Zygo WAP(angus@z-y-g-o.com)已经开发出了一个Perl工具包。它还在为管道式的WML编译器工作。
53. XML到XSL的转换可以应用到WML和WAP吗?
既然WML实际上是XML,并且XSL将WML转换成其他不同的XML文档,那么问题的答案是显然的:XSL也可以应用到WML。可以参考Luca Passani的文章《WebTechniques》。这个文章在网络上的地址是:
http://www.webtechniques.com/archives/2000/03/passani/
它推荐看一下叫做《在 Apache下Cocoon计划的实现》这篇文章。“Cocoon 是一个依赖于新的W3C技术(例如DOM,XML,和XSL)框架。Cocoon计划在于改变Wen信息创建,生成和提供的方式。文档内容、风格和逻辑经常因为个人或者工作组的不同而不同。 Cocoon目标在于将这三层分离,允许三层次之间进行独立的设计,创建和管理,减少相互之间的影响,增加工作的可复用性以及缩短上市的时间。Web内容的产生大多数是基于HTML的,但是HTML并不能将三者分离开来,混合着各种格式标签,程序逻辑等等。而Cocoon计划将要改变这种情况,允许内容,逻辑和风格相互分离。使用XML来保存,但是使用XSL来将它们混合。”
基本上来说,Cocoon将解读HTTP头,判断使用的是什么浏览器,然后使用不同的风格来选择正确的页面,使用XSL进行混合。
54. 想让用户只要简单地按下一个按钮就能够转跳到其他卡片而不是通过选择URL,这个可能吗?
不,不可能。
55. 如何避免一个行的中断以便可以在一行中输入多个链接?
在Nokia 7110中,不可能做到这一点,每个链接都占据自己的一行。
四、关于WMLScript的常见问答
1. 简单地说什么是WMLScript?
WMLScript是一种在客户端运行的脚本语言。它是基于ECMAScript的。WMLScript和Javascript非常相像,只是在功能上没有Javascript丰富。从更一般的方式来说,它是一个在客户端提供简单的应用程序,而不是一个显示的操作程序。WMLScript是一个经过优化,更利于WAP应用的程序。
2. 可以将WMLScript嵌入到WML页面中吗?
不行。不像将JavaScript嵌入到HTML中,WMLScript必须包含在一个独立的文件中。然后由WML调用。
3. 为什么一些Mitsubishi browsers(Trium)不能运行WMLScript?
Mitsubishi Trium能够运行WMLScript,但是浏览器有一个设置允许关闭WMLScript的运行。像其他的HTML浏览器一样,可以关闭Java或者JavaScript的运行。
当然这里会有一个毛病,即使它不能运行WMLScript,它还能接受WMLScritpt。
4. 在哪儿能学到WMLScript?
WMLScript.com的站点包含很多WMLScript的信息,甚至WMLScript library。
在Phone.com''s Developer站点注册之后,可以得到很好的WMLScript版本:http://updev.phone.com/dev/ts/beta/docs/wmlscript/
五、关于WBMP的常见问答
1. 如何创建WBMP?
RCP分发系统有Adobe Photoshop 5.x 和 PaintShop Pro的插件支持WBMP格式。
GINGCO和Teraflops提供转换的工具。
2. 哪种格式的图像可以放送到WAP终端?
WAP标准规定的BMP格式WBMP。WBMP Type 0是一个简单的黑白,非压缩的BMP格式。细节可以参考:
http://www1.wapforum.org/tech/terms.asp?doc=SPEC-WAESpec-19990524.pdf
如果某个WAP设备可以支持任何图像格式,那么WBMP Type 0是最小的要求。
3. 有GIF/JPEG 到WBMP的转换器吗?
有。在http://www.imagemagick.org。在http://www.rcp.co.uk同样有一个 Adobe photoshop 的插件。
4. 有没有实时转换GIF到WBMP的工具?
可以试试:
NetPBM:ftp://wuarchive.wustl.edu/graphics/graphics/packages/NetPBM/
PBMtoWBMP:http://www.looplab.com/WAP/tools/
5. 可以在WAP页面中混合声音和文本吗?
不。很长一段时间内不会。这是因为电话的内存有限。但是你可以试一试 Palm 或者 Windows CE 的手持设备。
6. 有一个WBMP图片在Nokia Toolkit上能正常运行,但是在Nokia 7110上却不能是为什么?
检查一下WML代码。确定IMG标签没有高度和宽度属性,这通常导致错误。另外一个原因是图像可能太大,造成当前的页面超过1400字节。
7. 当使用WBMP作为超链接等时,在7110模拟器上不工作,为什么?
7110不支持图像作为链接。
8. WAP设备可以使用图形而不是文本吗?
WAP协议允许使用一种叫做WBMP的图形标准,它是一个位(黑或者白)的BMP版本。因此,所有的图形,为了适合这个协议,必须转换成WBMP。
在使用WBMP的时候当然有很多限制,图像的大小不能超过150 x 150 像素。这是因为WAP设备的屏幕都非常有限。例如Nokia 7110 屏幕是96像素宽,65像素高。因此 150 x 150 像素看起来就特别大,占据了整个屏幕。另外受WAP电话的内存限制,图像的大小不能超过 1461 字节。
因为不是所有的WAP设备都能显示图像。因此,<img>中的“alt”必须使用,这样才能适用于那些不能显示图像的WAP设备。
“WAP Tiger”是一个非常简单的命令行BMP转换工具,可以去http://wap.infotiger.de/download.html下载。有 MS-DOS/Windows 和 Linux 版本。
可以在http://www.rcp.co.uk/distributed/Downloads找到免费的Photoshop/Paint Shop Pro插件。
Macromedia 有一个为 Fireworks的外接插件可以让用户输出WBMPs。PC版本在:
http://download.macromedia.com/pub/fireworks/xtras/wbmp_im_ex.exe
Mac 版本在:
http://download.macromedia.com/pub/fireworks/xtras/wbmp_im_ex.hqx
WebCab.de有一个非常漂亮的在线WBMP编辑器:
http://webcab.de/woe.htm
它能让你通过手工草稿生成、上传并编辑WBMP。如果只有服务器端的脚本语言程序,但是无法产生动态的WBMP,这是唯一的选择。
在http://www.gingco.de/wap/有一个免费的PIC2WBMP “独立”转换器。但是这个应用需要Java 运行环境。因此如果是个新手的话,最好是下载Paint Shop Pro 插件和最新的 Paint Shop Pro,网址是:
http://www.jasc.com/download.html
Paint Shop Pro 对于没有注册的用户来说是有时间限制的SW。注册费用是 $99 USD 。
Surerange Analysis Ltd 有一个免费的产品叫做ImageConvert Developer。它是一个单线程的ActiveX控件,可以将GIF和JPEG转换成WBMP。它同样有一个VC6的例子来说明如何使用。
Applepie Solutions 提供一个在线的,基于WEB的GIF到WBMP的转换:
http://www.applepiesolutions.com/image2.wbmp/
如果指定用户想转换的文件的URL地址,它将让用户下载转换后的文件。
在某些情况下用户想在HTML文档中显示WBMP。为了达到这个目的,Andre de Leiradella (leiradella@writeme.com) 已经写了一个Java和C程序来从WBMP输出GIF,看起来就好像一个小的LCD显示器。C版本可以作为CGI。应用程序可以到下面的位置找到:
http://members.xoom.com/leiradel/。