阿笨狗(jspadmin)网络日志

个人网络日志,网络、技术、思想、生活、札记……

« WAP常见问题问答大全4宝宝今天第一次自己抓住杯子喝东西,并且第一次喝橙汁--宝宝4个月了 »

WAP常见问题问答大全5

四、关于WMLScript的常见问答

1. 简单地说什么是WMLScript

    WMLScript是一种在客户端运行的脚本语言。它是基于ECMAScript的。WMLScriptJavascript非常相像,只是在功能上没有Javascript丰富。从更一般的方式来说,它是一个在客户端提供简单的应用程序,而不是一个显示的操作程序。WMLScript是一个经过优化,更利于WAP应用的程序。

2. 可以将WMLScript嵌入到WML页面中吗?

    不行。不像将JavaScript嵌入到HTML中,WMLScript必须包含在一个独立的文件中。然后由WML调用。

3. 为什么一些Mitsubishi browsersTrium)不能运行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格式。GINGCOTeraflops提供转换的工具。

2. 哪种格式的图像可以放送到WAP终端?

    WAP标准规定的BMP格式WBMPWBMP 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. 有没有实时转换GIFWBMP的工具?

    可以试试:
    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的外接插件可以让用户输出WBMPsPC版本在:
        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控件,可以将GIFJPEG转换成WBMP。它同样有一个VC6的例子来说明如何使用。
    Applepie Solutions
提供一个在线的,基于WEBGIFWBMP的转换:
    http://www.applepiesolutions.com/image2.wbmp/
   
如果指定用户想转换的文件的URL地址,它将让用户下载转换后的文件。
   
在某些情况下用户想在HTML文档中显示WBMP。为了达到这个目的,Andre de Leiradella leiradella@writeme.com) 已经写了一个JavaC程序来从WBMP输出GIF,看起来就好像一个小的LCD显示器。C版本可以作为CGI。应用程序可以到下面的位置找到:
    http://members.xoom.com/leiradel/

9. 如何实现动画?

    WBMP图像不同于在HTML中广泛使用的GIF格式。它不支持动画。但是还是可以使用WML <ontimer> 标签来创建一个。请注意这种方式不是能达到想象中效果的。
   
通过研究Animated Images Demo可以有这方面的一点概念。其网址为:
    http://wap.colorline.no/demos.html
   
或者到:
    http://wap.colorline.no/wap-faq/apps/anim.html
   
当在执行这样的动画方式的时候,要记住微型浏览器的内存是有限制的。不可能将所有的图片都装入到内存中。浏览器也不会装入那些过大的图片,因此某些动画可能在装入的时候就中断了。
   
演示程序:

<?xml version="1.0"?>
   <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN\"
  "http://www.wapforum.org/DTD/wml_1.1.xml">
  <!-- Code written in Microsoft NOTEPAD.EXE. (c) Espen Lyngaas 2000 Color Line ASA -->
  <wml>
    <card id="image1" ontimer="#image2">
      <timer value="10"/>
      <p>
        <img src="anim1.wbmp" alt="Anim1"/>
      </p>
    </card>
    <card id="image2" ontimer="#image3">
      <timer value="10"/>
      <p>
        <img src="anim2.wbmp" alt="Anim2"/>
      </p>
    </card>
    <card id="image3" ontimer="#image4">
      <timer value="10"/>
      <p>
        <img src="anim3.wbmp" alt="Anim3"/>
      </p>
    </card>
    <card id="image4" ontimer="#end">
      <timer value="10"/>
      <p>
        <img src="anim4.wbmp" alt="Anim4"/>
      </p>
    </card>
    <card id="end" title="The End">
      <p>
         This is the end of the animation, but you can
         <anchor>run it again.
           <go href="#image1">
           </go>
         </anchor>
      </p>
    </card>
  </wml>

    如果使用PHP,可以看看更简单的程序:

<?
    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\n");
    echo("<!-- Code written in Microsoft NOTEPAD.EXE. (c) Espen Lyngaas 1999 Color Line ASA -->\n");
  ?>

<wml>

  <?
    for($card=1;$card<5;$card++) {
      echo("<card id=\"image".$card."\" ontimer=\"#image".$card+1.">"\n");
      echo("<timer value=\"10\"/>\n");
      echo("<p>\n");
      echo("<img src=\"anim".$card.".wbmp\" alt=\"Anim".$card."\"/>\n");
      echo("</p>\n");
      echo("</card>\n");
    }
  ?>
  <card id="image5" title="The End">
  <p>
    This is the end of the animation, but you can
    <anchor>run it again.
      <go href="#image1">
      </go>
    </anchor>
  </p>
  </card>
  </wml>

10. 如果WBMP图片看起来糟糕极了,该怎么办?

    WBMP只有两种颜色,要是图片漂亮需要一定的技巧。但是可以减少图片的颜色。这里有一个叫做Floyd-Steinberg的方法可以做到。这样的一个程序是Jasc Paint Shop ProPaint Shop Pro的价格不是很贵,而且有直接保存为WBMP的插件。还可以使用30天免费版本。

11. 能够生成动态的WBMP图像吗?

    当然。可以使用PHPASP 或者 Perl 来完成。这可能需要一种图像转换工具,因为服务端的脚本语言不支持WBMP的转换。
   
下面有一个PHP 的例子来说明使用脚本语言来完成的过程。
   
因为当前版本的GD不再创建GIF图像,而是称作PNG Portable Network Graphics)图像。所以使用当前版本的PHP,只需要修改少量的代码就可以将GIF 转换到 PNG。另外,可以用“DuPonts Image Magick ”将PNG 或者转换成 WBMP,它能在两者之间相互转换,并适合于多种平台。
   
在代码里,笔者用到了PHP功能 ImageCreateFromGif(),要输一些文本到GIF图像上,可以使用PHP ImageGreate()创建一个空白的 GIF/PNG 图像。
   
以下是代码:

<?
 // hardcoded "variables" are safer!
// path to blank GIF file
not really needed (see above)
    $blank = "./wapclock_blank.gif";
// You can look at it here
// path to input file generated by PHP
    $input = "/tmp/wapclock.gif";
// path to temporary output file. Extension is irrelevant
    $output = "/tmp/wapclock.out";
// path to ImageMagick convert
    $convert = "/usr/local/bin/convert";
    if($format == "gif") {
// if it
s GIF, send that Content-type
       header("Content-type: image/gif");
       $type = "GIF";
    }
    else {
      if($format == "wbmp") {
// if it
s WBMP, send that Content-type
        header("Content-type: image/vnd.wap.wbmp");
        $type = "WBMP";
      }
      else {
   // hope that the browser can read this
        header("Content-type: text/plain");
   // or someone forgot to set the format variable
        $type = "";
      }
    }
  // turn off caching
    header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
    header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
    header("Cache-Control: no-cache, must-revalidate");  
    header("Pragma: no-cache");
 
// create a GIF file from an empty GIF file (see faq)
    $im = imagecreatefromgif($blank);

// put the current time into the time variable
    $time = date("H:m:s");

// Place time variable sort of in the middle, with font size 4
    imagestring($im,4,6,15,$time,0);
// generate a GIF file with PHP (see faq)
    ImageGif($im,$input);
// empty the GD temporary buffer
    ImageDestroy($im);

    if(strlen($type) > 0) {
// if the type is known
// do the conversion
      exec($convert. " ".$input. " ".$type. ":".$output);
    }
    else {
// or do nothing
      echo("Unknown format!\n");
// and stop
      exit;
    }
 // open the converted file
    $fd = fopen($output, "r");
// read verything into a variable
    $contents = fread($fd,filesize($output));
// close the file
    fclose($fd);
// pour out the contents
    echo($contents);
  ?>

    以上的代码是输出GIFWBMP数据流。为了使用真正的图像,必须像下面这么写:

<?
    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\n");
    echo("<!Code written in Microsoft NOTEPAD.EXE. (c) Espen Lyngaas 2000 Color Line ASA à \n");
 ?>

  <wml>
    <card id="wapclock" title="WAP Clock">
      <do type="prev" label="Reload Image">
        <go href="<?echo($PHP_SELF)?> "/>
      </do>
      <p>
        <img src="http://wap.colorline.no/wap-faq/apps/gfxclock.html?format=wbmp"
alt="You should see an image
"/>
      </p>
    </card>
  </wml>

12. 针对多大的屏幕进行开发?

    WAP设备的显示状况千差万别,有些支持图形,有些只支持文本。下面给出一些型号的屏幕尺寸:Mitsubishi 还没有公布的WAP电话有312个字符的显示器。Nokia 7110 的屏幕是96个像素宽,65个像素高,最大的显示图像是95个像素宽,45的像素高,高和宽的比例大约是1.25。因此一个正方型应该是一个实际宽高比为1:1.25的长方形,对于圆来说也是一样。
    Ericsson's R320
有一个类似大小的显示屏幕。精确的大小是101像素宽,52像素高。可以显示4行文本,而且自动换行是默认的方式。
    Ed Chew
Ed.Chew@scoot.co.uk) 检验过 “R380 Design Guideline for WAP Services”, 并且发现在Ericsson R380 360x120 像素的分辨率 (83x28mm),  0.23点距,浏览区域是限制在310(宽),100(高) pixels ,包括顶部的两个像素的空格,左边和右边的三个像素的空格,因此实际上只有304 x 98 像素。
   
为了弄清显示器到底有多大的大小,在http://wap.colorline.no/demos.html (选择 “Resolution matrix”)有一个分辨矩阵的演示程序。 页面将显示三个不同大小的图像,一个垂直和一个水平,它们是一个方向上十个像素,另外一个方向上只有一个像素,这样你马上就能知道屏幕到底有多大。另外他们的大小是:80x80100x100 120x120像素,因为有些浏览器不能装载那些过大的图片。
   
由于有些显示器的点是长方形的,而不是正方形的,所以开发人员需要重新影射图像,让他们看起来像正方形,圆看起来像圆。但笔者不推荐这个方法,除非你知道用户所使用的WAP设备的真正比例。一个在7110上看起来很好的图到了R380上会很糟糕。

13. WML中可以预先装入图片吗?

    HTML中,图片可以先使用简单的JavaScript来装入。但是在WML或者WMLScript中没有这样的方法。 Paul St. Georgeemail@paulstgeorge.com)提供了一种欺骗浏览器,让它装入图片但不显示的办法。对于图片,如果足够小,可以事先读入到WAPCache中。如果所有的图像都能够装入的话,就不需要连接到服务器上了。
   
首先需要一个能够撑满屏幕的透明图片,因此它们是一个像素宽,并且和显示屏幕具有相同的高度。将图片做成透明的,这样它将占据整个屏幕,然后装载剩下的图片,等图片装载完后timer启动,开始动画。
   
在下面的例子中,可能需要改变一下timer的数值,让它有时间来装入图片。

<wml>
    <card id="p" ontimer="#f1">
    <!-- Adjust this timer to taste. -->
    <timer value="10"/>
      <p align="center">
        <img src="spacer1.wbmp" alt="x"/>
      </p>
      <p>
        <img src="1.wbmp" alt="1"/>
      </p>
      <p>
        <img src="2.wbmp" alt="2"/>
      </p>
      <p>
        <img src="3.wbmp" alt="3"/>
      </p>
      <p>
        <img src="4.wbmp" alt="4"/>
      </p>
      <p>
        <img src="5.wbmp" alt="5"/>
      </p>
    </card>

    <card id="f1" ontimer="#f2">
      <timer value="10"/>
      <p align="center">
        <img src="spacer15.wbmp" alt="x"/>
      </p>
      <p align="center">
        <img src="1.wbmp" alt="1"/>
      </p>
    </card>

    <card id="f2" ontimer="#f3">
      <timer value="10"/>
      <p align="center">
        <img src="spacer10.wbmp" alt="x"/>
      </p>
      <p align="center">
        <img src="2.wbmp" alt="2"/>
      </p>
    </card>

    <card id="f3" ontimer="#f4">
      <timer value="10"/>
      <p align="center">
        <img src="spacer08.wbmp" alt="x"/>
      </p>
      <p align="center">
        <img src="3.wbmp" alt="3"/>
      </p>
    </card>

    <card id="f4" ontimer="#f5">
      <timer value="10"/>
      <p align="center">
        <img src="4.wbmp" alt="4"/>
      </p>
    </card>

    <card id="f5" ontimer="#f1">
      <timer value="10"/>
      <p align="center">
        <img src="5.wbmp" alt="5"/>
      </p>
    </card>
  </wml>

14. 为什么有些WBMP无法显示?

    图像可以使用<img>标签来指示。大多数无法显示的情况是因为错误地使用了<img>语法。这个标记至少要有srcalt两个参数。其他参数是可选的。src指定图像的来源,alt指定当图像不能显示的时候显示的内容,并且在最后有反斜杠结尾。

    <img src="path/filename.wbmp" alt="Alternative Text"/> 

如果页面是由HTTP服务器提供的,服务器也必须设置WBMP正确的MIME类型。正确的类型是“image/vnd.wap.wbmp”。
   
问题也可能出在图像本身,因为WBMP的格式非常有限,只有黑白两色,而且大小要适合WAP设备。有些WAP开发工具让允许使用GIF图片,但是WAP设备只支持WBMP图片。

Share
  • quote 1.老余
  • http://laoyu.info
  • jspadmin现在研究wap呢

    越来越多的手机装了访问普通html网页的浏览器,不知道wml的前途如何

    现在我的手机用ucweb,挺好用,兼容wml和html

    最近项目比较忙,也没常来做客,呵呵

    周末把我的博客升级到2.7了,还换域名了,请帮忙改一下友情链接吧
    原来的小武 t263.net改为
    老余 http://laoyu.info

    谢谢,多交流
  • 2008-12-28 18:50:45 回复该留言

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

日历

最新评论及回复

最近发表

Powered By Z-Blog 1.8 Walle Build 100427

Auto Publisher Copyright 1999-2011 www.pifoo.com. Some Rights Reserved.
闽ICP备05035478号