|
|
| WAP常见问题问答大全--三、关于WAP开发的常见问答 |
| 作者:不详 来源:不详 发布时间:2006-2-23 14:10:40 发布人:tangyunfei |
减小字体
增大字体
开发WAP软件需要哪些工具?
有哪些公司现在提供这样的开发环境?
Ericsson:Ericsson R320和WapIDE。 UpPhone:UpPhone SDK。 Motorola:Motorola ADK。
开发WAP应用一定要有WAP手机吗?
开发者需要一个WAP网关吗?
可以看到WML的源代码么?
可能在WML中加入applets吗?
可以使用HTML开发工具来开发WAP应用吗?
可以到 Marjolei Katsma的 HomeSite Help site 上得到更多的信息。
可以通过WML页面来操作数据库吗?
可以使用CGI生成WML页面吗?
如何使用Cold Fusion来生成页面?
如何使用PHP来书写动态的WML页面?
PHP同样可以在一个HTML文件中编写出既适合于HTML,也适合于WML的内容。PHP的源代码对于客户端来说是不可见的。因此可以针对HTML浏览器输出HTML页面,针对WML浏览器输出WML页面。 可以在开发PHP编写的WML页面的时候把以下代码加在开头:
echo("<!DOCTYPE wml PUBLIC \"-//WAPFORUM//DTD WML 1.1//EN\" //"http://www.wapforum.org/DTD/wml_1.1.xml\">\n\n"); ?>
使用PHP动态输出WML
使用WML浏览器就可以测试应用程序: http://wap.colorline.no/wap-faq/apps/pizzacalc.html。 或者输入: http://wap.colorline.no/demos.html选择应用。
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("<!--The application PizzaCalc was originally made by The Crusaders www.crusaders.no on the Commodore Amiga -->\n"); echo("<!-- It was unfortunately not possible to emulate the crap interger handling of the original program -->\n"); ?>
<wml> <? if($action == "calc") { echo("<card id=\"result\" title=\"PizzaCalc\">\n"); echo("<do type=\"prev\" label=\"Back\">\n"); echo("<go href=\"pizzacalc.html#input\"/>\n"); echo("</do>\n"); echo("<p>\n"); echo("The cost per eater will be ".$total / $eaters."<br/>\n"); } else { echo("<card id=\"input\" title=\"PizzaCalc\">\n"); echo("<p>\n"); echo("<anchor>Split Pizza bill <go href=\"pizzacalc.html?total=\$(total)&eaters=\$(eaters)&action=calc\"/> </anchor>\n"); echo("<br/>\n"); echo("Total cost: <input type=\"text\" name=\"total\" format=\"*N\"/>\n"); echo("Eaters: <input type=\"text\" name=\"eaters\" format=\"*N\"/>\n"); } ?> </p> </card> </wml>
可以使用Java Servlet来生成WML页面吗?
如何使用ASP书写WML内容?
使用ASP动态输出WML页面时候,已经设置了Content-type,但浏览器返回的仍然是text/html,有什么问题吗?
在使用ASP生成WML页面的时候出现了错误: <MIME type "text/html" is not supported>,会是什么问题?
下面的代码有什么问题吗?
代码可以在模拟器上工作,在真正的浏览器上怎么不行?
这里在ASP生成动态页面的时候有一个微小的“bug”。它在WML浏览器上不允许有任何地方输出白行(例如:空格,回车,换行)。注意到有些网关可能会修正这些问题,但有的则不管(例如:CMG网关)。 下面是一个常见的ASP代码用来输出WML页面开头的MIME类型:
如何使用Perl来生成WML内容?
print "<!DOCTYPE wml PUBLIC \"-//WAPFORUM//DTD WML 1.1//EN\" \"http://www.wapforum.org/DTD/wml_1.1.xml\">\n"; print "<wml>\n"; ……
应当如何下手书写WAP应用程序?
在Nokia WAP 开发论坛中进行注册,并且下载Nokia WAP Developer Toolkit 。Toolkit中的PDF文件可以给出一定的WML和WMLScript指导。Nokia Toolkit需要JRE (Java Runtime Environment) v.1.2.2 或者更高版本。 虽然工具可以用来为WAP设备设计应用,但是不是为专门的移动电话。在WAP开发工具上所看到的并不代表用户在手机上所看到的。为了确定想看到的事情,最好需要一个WAP设备,例如移动电话,或者模拟器。 Nokia WAP SDK 2有一个7110的模拟器。模拟器是一个有效的检测方式,能检测程序中的bug。 Nokia SDK 同样还包括一个小的WAP server让开发者可以从本地或者HTTP服务器上下载WML页面。 到 Phone.com 开发站点注册后,Phone.com 提供UP.browser。这是最流行的浏览器,特别是在美国,Phone.com 提供UP.SDK。 在注册之后就可以下载。 对于Ericsson R320 和 R380是最近的事情。应该注册并查看Ericsson's Developer's Zone 来得到开发工具。R380是一个非常好的模拟器,在 Symbian 不需要注册就可以下载。Ericsson 没有公开的为R320的模拟器。 Motorola 有一个平台叫做 Mobile Internet eXchange 或者 MIX 。Mobile Application Development Kit 已经开发出一个开发平台,即为WAP也为Motorola的 VoxML。在注册后,可以在下面的网址找到数据包。
如何编写和测试WML页面?
哪儿可以在找到WML的测试工具?
如何操作WML页面?
如果要坚持这种方法,可以通过ISP拨号或者使用一个公共的网关来取得其他的WAP资源。
有没有一个友好的方式来管理WML内容?
如何防止用户代理cache页面?
怎样防止从Cache中读取WML页面?
可以在服务器端生成HTTP头,或者使用PHP、ASP、Perl或者其他服务端开发语言。这一行不能被包括在页面里,既然是HTTP的信息头,就不是WML元素。 对于静态页面,或许没有使用服务器端脚本语言,许多浏览器支持META标签来控制浏览器的Cache。看本部分的最后的例子。 将下面代码加入到HTTP头中,页面将马上过期:
Cache-Control: no-cache, must-revalidate Pragma: no-cache
header("Content-type: text/vnd.wap.wml"); // expires in the past header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Last modified, right now header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); // Prevent caching, HTTP/1.1 header("Cache-Control: no-cache, must-revalidate"); // Prevent caching, HTTP/1.0 header("Pragma: no-cache"); ?>
Response.ContentType = "text/vnd.wap.wml" 'Make sure no caching Response.Expires = -1 Response.AddHeader "Pragma", "no-cache" Response.AddHeader "Cache-Control", "no-cache, must-revalidate" 'Use basicwml(my own) as template Set NextItem = basicwml End Sub
Response.Expires = -1 Response.AddHeader "Pragma", "no-cache" Response.AddHeader "Cache-Control", "no-cache, must-revalidate" %>
"http://www.wapforum.org/DTD/wml_1.1.xml"> <wml> <head> <meta forua="true" http-equiv="Cache-Control" content="max-age=0"/> </head> <card id="alwaysexpire"> <p>This deck will never be stored in the cache</p> </card> </wml>
"http://www.wapforum.org/DTD/wml_1.1.xml"> <wml> <head> <meta forua="true" http-equiv="Cache-Control" content="max-age=86400"/> </head> <card id="expire1day"> <p>This card will live in the cache for a day</p> </card> </wml>
如何防止变量被保存在Cache中?
当newcontext="true" 时清除所有的变量。但是这样也清除了所有导航的历史记录,这意味着back按钮不再工作。 为了清除变量,可以告诉浏览器将变量设为空:
<setvar name="one_variable" value=""/> <setvar name="another_variable" value=""/> </refresh> </onevent>
怎么能够知道请求是从WML浏览器来的还是HTML浏览器来的?
// the first characters in the file must be the <? PHP tag.
// relative URL to your HTML file $htmlredirect = "/html/my_htmlpage.html"; // ABSOLUTE URL to your WML file $wmlredirect = "http://wap.mysite.com/wml/my_wmldeck.wml";
if(strpos(strtoupper($HTTP_ACCEPT),"VND.WAP.WML") > 0) {// Check whether the browser/gateway says it accepts WML. $br = "WML"; } else { $browser=substr(trim($HTTP_USER_AGENT),0,4); if($browser=="Noki" || // Nokia phones and emulators $browser=="Eric" || // Ericsson WAP phones and emulators $browser=="WapI" || // Ericsson WapIDE 2.0 $browser=="MC21" || // Ericsson MC218 $browser=="AUR " || // Ericsson R320 $browser=="R380" || // Ericsson R380 $browser=="UP.B" || // UP.Browser $browser=="WinW" || // WinWAP browser $browser=="UPG1" || // UP.SDK 4.0 $browser=="upsi" || // another kind of UP.Browser ?? $browser=="QWAP" || // unknown QWAPPER browser $browser=="Jigs" || // unknown JigSaw browser $browser=="Java" || // unknown Java based browser $browser=="Alca" || // unknown Alcatel-BE3 browser (UP based?) $browser=="MITS" || // unknown Mitsubishi browser $browser=="MOT-" || // unknown browser (UP based?) $browser=="My S" || // unknown Ericsson devkit browser ? $browser=="WAPJ" || // Virtual WAPJAG www.wapjag.de $browser=="fetc" || // fetchpage.cgi Perl script from www.wapcab.de $browser=="ALAV" || // yet another unknown UP based browser ? $browser=="Wapa") // another unknown browser (Web based "Wapalyzer"?) { $br = "WML"; } else { $br = "HTML"; } }
if($br == "WML") { // Force the browser to load the WML file instead header("302 Moved Temporarily"); header("Location: ".$wmlredirect); exit; } else { // Force the browser to load the HTML file instead header("302 Moved Temporarily"); header("Location: ".$htmlredirect); exit; } ?>
注意:由于只需要四个字符串就可以辨别,因此例如:"WapIDE-SDK/2.0;(R320s(Arial))" 可以使用“WapI”来代替是可行的做法,也是足够的。 同样的功能也可以通过ASP来解决。先判断请求的是“/index.wml” 或者 “/index.html” 和所需要的MIME类型。另外以下的脚本辨别的方式和上面不一样。另外还需要网关告诉服务器它能接收 的text/vnd.wap.wml MIME类型。该例子如下所示:
Dim IsWap httpAccept = LCase(Request.ServerVariables("HTTP_ACCEPT")) if Instr(httpAccept,"wap") then IsWap=1 Else Response.Redirect "/index.html" : Response.Flush : Response.End End if %> <%Response.ContentType = "text/vnd.wap.wml"%><?xml version="1.0"?> <%Response.Flush%> <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml"> <wml> <card id="redirect"> <onevent type="onenterforward"> <go href="/index.wml"/> </onevent> <p> <a href="/index.wml">enter</a> </p> </card> </wml> <%Response.Flush:Response.End%>
如何判断访问者是来自哪个浏览器或者移动电话?
可以得到用户代理的电话号码吗?
可以通过WML使得可以用WAP设备进行拨号吗?
能够从WAP设备中读取数据吗,例如:电话号码?
每次WAP设备向HTTP服务器请求一个URL,WAP网关就会将信息传送给HTTP服务器。 以下的PHP脚本显示了从网关过来的所有HTTP头的信息。可以使用WML浏览器进行测试。(http://wap.colorline.no/clientinfo.html)。其他的例子也可以在下面的UTL中找到:http://wap.colorline.no/demos.html 第一个部分是取得所有的标准HTTP头信息。第二个部分是提取一个内容。
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 à \n"); ?>
<wml> <card id="init" title="Client Info"> <p> <? // First part – standard HTTP stuff $headers = getallheaders(); while (list($header, $value) = each($headers)) { echo strtoupper($header). ": ". $value. "<br/>\n"; } // Second part
// Port at the client side echo("REMOTE_PORT: ".$REMOTE_PORT. "<br/>\n"); // Name of authenticated user echo("REMOTE_USER: ".$REMOTE_USER. "<br/>\n"); // Gateway Interface type echo("GATEWAY_INTERFACE: ".$GATEWAY_INTERFACE. "<br/>\n"); // Protocol used by the server echo("SERVER_PROTOCOL: ".$SERVER_PROTOCOL. "<br/>\n"); // Request Method echo("REQUEST_METHOD: ".$REQUEST_METHOD. "<br/>\n"); // Connection type echo("HTTP_CONNECTION: ".$HTTP_CONNECTION. "<br/>\n"); // Host it connected via (proxy) echo("HTTP_VIA: ".$HTTP_VIA. "<br/>\n"); ?> </p> </card> </wml>
这些程序只适合某个网关。如果要测试其他的网关,可能就显示不出电话号码。因此电话号码不能作为ID号来处理。至少因为不是一个全球的标准。
有没有办法连接到电话号码?
使用GET或者POST方式能传送多少字符?
在POST和GET之间没有太多的区别。比如这个没有很好地使用GET的例子。
<anchor>Send it <go href="somescript.cgi?variable=$(var1)" method="get"/> </anchor> </p>
<anchor>Send it <go href="somescript.cgi" method="get"> <postfield name="variable" value="$(var1)"/> </go> </anchor> </p>
<anchor>Send it <go href="somescript.cgi" method="post"> <postfield name="variable" value="$(var1)"/> </go> </anchor> </p>
脚本生成一个页面来测试使用GET或者POST方式到底能发送多少个字符:
"http://www.wapforum.org/DTD/wml_1.1.xml"> <wml> <head> <meta forua="true" http-equiv="Cache-Control" content="max-age=0"/> <meta forua="true" http-equiv="Cache-Control" content="must-revalidate"/> </head> <card> <do type="prev" label="Back"> <go href="putsize.php3"/> </do> <p> <anchor>GET data <go method="get" href="putsize.php3"> <postfield name=\"a\" value="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"/> </go> </anchor> </p> </card> </wml>
如何同HTML站点一样POST/CGI,返回表单数据到服务器?
无法工作是怎么回事?
当使用POST的URL时 ,Nokia SDK 将会崩溃。在某些情况下URL的最后的字符将被删除。 POST Test页面将简单的POST的两个变量叫做“var1”和“var2”来显示整个变量的内容和HTTP头的内容。如果不能看到正确的变量内容,肯定有问题。检查HTTP头中的application/x-www-form-urlencoded(注意!需要在变量中输入一些内容)。 这个方法解决了Nokia SDK 2.18的问题,可以把它配置到任意的公共网关来测试。笔者推荐使用 wapHQ 网关。 在其他的情况下,POST确实不工作,问题可能是HTTP头在服务器端解释的时候有问题。脚本语言,例如:ASP、Java或是CGI等等都是通过查看在HTTP头中的 application/x-www-form-urlencoded 完全匹配的字符串。在某些情况下字符串可能有附加的数据,例如:charset="utf8" 。既然服务器端不是精确的匹配,它就不会查看HTTP头,因此POST就变量丢失了。 注意这不是浏览器的问题,在HTTP头加入字符集描述,将造成脚本语言方面的错误。 为了检测有关网关或浏览器的问题,仍使用上面的POST Test页面来测试。同样查看application/x-www-form-urlencoded 的输出,检查有没有附加的字符在结尾部分,如果有,那么这就是服务器端的问题。 解决这个问题的方案很复杂,它随用户使用的脚本描述语言不同而不同,而且需要操作原代码。简单地说,解决方案就是需要人工读取HTTP头,不要使用脚本语言已经写好的读取方式。 这里有一个用ASP编写的解决方法。它显示了如何在POST中抓取数据。用户需要从二进制数据中发现需要的变量。
lngTotalByteCount = Request.TotalBytes vntRequestData = Request.BinaryRead(lngTotalByteCount)
Dim Temp, i, sPost, sWMLDeck
'Converts the binary data to a string. For i = 1 To Request.TotalBytes Temp = Request.BinaryRead(1) sPost = sPost & Chr(AscB(Temp)) Next
'Parses out the values of the POSTED variables (in this 'example myvar1 and myvar2). Dim sVar1, sVar2 sVar1 = getVar("myvar1", sPost) sVar2 = getVar("myvar2", sPost)
'Writes the WML Deck displaying the POSTED Variables sWMLDeck = "<?xml version=""1.0""?>" & vbCrLf sWMLDeck = sWMLDeck & "<!DOCTYPE wml PUBLIC ""-//WAPFORUM//DTD WML 1.1//EN"" " sWMLDeck = sWMLDeck & """http://www.wapforum.org/DTD/wml_1.1.xml"">" & vbCrLf sWMLDeck = sWMLDeck & vbCrLf & "<wml>" & vbCrLf & vbTab sWMLDeck = sWMLDeck & "<card id=""main"" title=""POST TEST"">" & vbCrLf sWMLDeck = sWMLDeck & vbTab & vbTab & "<p>" & vbCrLf sWMLDeck = sWMLDeck & vbTab & vbTab & vbTab & "myVar1: " & sVar1 & "<br/>" & vbCrLf sWMLDeck = sWMLDeck & vbTab & vbTab & vbTab & "myVar2: " & sVar2 & vbCrLf sWMLDeck = sWMLDeck & vbTab & vbTab & "</p>" & vbCrLf & vbTab sWMLDeck = sWMLDeck & "</card>" & vbCrLf & ">/wml>"
Response.ContentType = "text/vnd.wap.wml" Response.Write(sWMLDeck)
'Quick function for picking out the values of the POSTed variables. 'sKey is the variable name, sRaw is the POST string. Private Function getVar(sKey, sRaw) Dim sRetVal If InStr(sRaw, sKey) Then sRetVal = Mid(sRaw, InStr(sRaw, sKey) + Len(sKey) + 1) If InStr(sRetVal, "&") Then sRetVal = Mid(sRetVal, 1, InStr(sRetVal, "&") - 1) End If End If getVar = sRetVal End Function %>
为什么META标签不工作?
为什么服务器接收不到用户发送的参数?
对于WAP环境,要求是非常严格的,必须要根据协议来操作。虽然以下的URL
<p><input type="text" name="occupation" format="M*m"/></p> <p> <anchor>Send this <go href="/cgi-bin/somescript?username=$(username) &occupation=$(occupation)"/> </anchor> </p>
为什么在HTTP中的Referer看不见?
如果没有找到URL,有可能重新将用户引导到另外一个WML卡片或者页面吗?
为什么普通的HTTP 302重新导向不好使?
以下的例子已经经过测试,在Apache和Microsoft Internet Information Server都可以工作。如果使用其他的Web Server,或者其他的脚本语言,需要能转换这些简单的脚本。关键的工作是十分简单的,除非需要,不用告诉服务器整个HTTP头。大多数Web Server将自动完成这个HTTP头,使得用户代理可以理解。 所有的代码例子可以在线测试。如果它们能够工作,用户将被重新引导到http://wap.colorline.no/clientinfo.html ,在那儿将产生一个WML页面来显示所有的HTTP头。 PHP 代码测试可以在 http://wap.colorline.no/wap-faq/apps/302test.php3中找到。
header("Content-type: text/vnd.wap.wml"; ?>
Response.ContentType = "text/vnd.wap.wml"; Response.Flush Response.End %>
可能在WML中实现ASP Session吗?
支持Session吗?
另外一种方法是使用 PHPlib ,它是使用 PHP 编写的。 Tarique (tarique@nagpur.dot.net.in) 提供了如何使用PHPlib来验证和处理每个WAP用户。有相关的文件和注释可以到下面地址下载:
可以在WAP中使用Cookies吗?
支持Cookies吗?
http://wap.colorline.no/wap-faq/apps/cookietest.php3 脚本在http://wap.colorline.no/demos.html也可以得到。 当第一次看见卡片的时候,记数器应该为0。所有的Cache都被关闭。卡片通过在URL中随机地加入变量来强制自己加载(笔者不推荐这种强制加载办法)。当点击增加计数连接,页面将重新加载,卡片就再次出现,并且记数器变成1。 在脚本中,Cookie的名字被称做 TestCookie,它有很长的生命期,因此可以隔好几天再来查看记数器,它将是上一次的数值。这要求你能使用与上一次访问所使用的WAP环境一样,否则将把你的数值清0。 如果记数装置一直都是0,那么cookie 就没有能传送到你的Web Server。这个脚本也能表示Cookie是否被传送。 另外,这个脚本同样还显示HTTP头中的HTTP_VIA 和 HTTP_USER_AGENT 。这些能够得到所使用的网关和模式。一些网关使用HTTP_VIS标识自己,而另外一些使用HTTP_USER_AGENT,还有一些则让程序无法知道。 下面是它的PHP代码。一个标准的 PHP setcookie() 函数只有在这种脚本语言中才会出现。函数只是简单地设置cookie,并且PHP变量 $HTTP_COOKIE_VARS 用来读取cookie。
{// Check if TestCookie is set $cookieset = "set";
// and increase its value $cookieid++; } else { // cookie was not set $cookieset = "not set"; // start counter at zero $cookieid = 0; } // apply the Cookie to the HTTP header setcookie("TestCookie",$cookieid); // set the content type for WML header("Content-type: text/vnd.wap.wml");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); header("Cache-Control: no-cache, must-revalidate"); header("Pragma: no-cache"); 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("<!-- This application attempts to test the capabilities of a WAP gateway to support cookies -->\n"); echo("<!-- App by Espen.Lyngaas@colorline.no (c) 2000 -->\n"); // Generate random value for reload forcing $random = mt_rand(100000,999999); ?> <wml> <head>
</head> <card id="init" title="CookieTest"> <p> Cookie "TestCookie" was <?echo($cookieset)?>. Value is currently "<?echo($cookieid)?>" </p> <p>
<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>
如何使用WAP设备发送E-Mail?
<p>From: <input type="text" name="from" format="*M"/></p> <p>T <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>
为了演示它是如何工作的,下面的 PHP 脚本可以用来处理Mail。它将格式化WML页面,告诉用户是否发出信件。在真实的应用中,应该加入检测,例如:E-Mail的合法格式。
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-1\nContent-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"); ?>
可以在模拟器上操作本地的页面,却没有办法访问Internet上的,有什么问题吗?
在某些情况下,代理服务器使用 userid 和 password 来取得进入Internet的权限。有些模拟器支持用户代理服务器,用户应该能告诉模拟器相关的代理配置。 在极少的情况下,使用代理服务器(如Microsoft Proxy Server,)的用户会遇到更多的问题。这个代理服务器只接受一种验证方式(userid/password)。这种验证被称做 NTLM ,并且是某种 MS 的验证方式。几乎很少有模拟器支持这种方式。因此最好是避免使用它,或者让管理员使用“Basic Authentication”方式以避免更多的麻烦。
什么是PUSHing,它是如何工作的?
当前只有 WAP 1.2 开发平台支持 PUSH, 例如 Nokia Toolkit 2.0。 Nokia Toolkit 2.0 only 内部支持PUSHing,意味着用户可以从工具包的界面将消息推送到模拟器。如果想试着到一个外部的Push Proxy Gateway, 工具包就崩溃了。从readme文件中知道,PUSHing 还没有经过完整的测试。
模拟器说text/html不支持,但是用户的MIME设置是正确的,为什么?
一个开发工具/模拟器可以让用户看到从HTTP服务器过来的代码。例如,在Nokia SDK中,这个功能被称做View Source。通过看代码可以知道HTTP服务器到底发送了些什么内容。也可以使用普通的浏览器来查看任何HTML格式的错误信息。
在哪儿有Visio移动电话的模板库?
有没有其他有用的WML内容服务列表?
Angus 和 Zygo WAP(angus@z-y-g-o.com)已经开发出了一个Perl工具包。它还在为管道式的WML编译器工作。
到XSL的转换可以应用到WML和WAP吗?
它推荐看一下叫做《在 Apache下Cocoon计划的实现》这篇文章。“Cocoon 是一个依赖于新的W3C技术(例如DOM,XML,和XSL)框架。Cocoon计划在于改变Wen信息创建,生成和提供的方式。文档内容、风格和逻辑经常因为个人或者工作组的不同而不同。 Cocoon目标在于将这三层分离,允许三层次之间进行独立的设计,创建和管理,减少相互之间的影响,增加工作的可复用性以及缩短上市的时间。Web内容的产生大多数是基于HTML的,但是HTML并不能将三者分离开来,混合着各种格式标签,程序逻辑等等。而Cocoon计划将要改变这种情况,允许内容,逻辑和风格相互分离。使用XML来保存,但是使用XSL来将它们混合。” 基本上来说,Cocoon将解读HTTP头,判断使用的是什么浏览器,然后使用不同的风格来选择正确的页面,使用XSL进行混合。
想让用户只要简单地按下一个按钮就能够转跳到其他卡片而不是通过选择URL,这个可能吗?
如何避免一个行的中断以便可以在一行中输入多个链接?
|
|
[]
[返回上一页]
[打 印]
[收 藏] |
|
| ∷相关文章评论∷ (评论内容只代表网友观点,与本站立场无关!) [更多评论...] |
|
|