如果你用移动的变态网址来测试wml,仍然可能失败,比如:
浏览器打开http://211.136.165.53/tt.jsp [^] 密码:cmv2oo9
你会得到如下错误:
不要紧,这个是这个网站的dtd不规范的原因,移动把网页第一行的dtd写成了小写,所以,你可以去查找Invalid DTD Public ID出现的位置。经过查找,发现是在:
external/webkit/webcore/dom/XMLTokenizerLibxml2.cpp下面的internalSubset()方法中的:
#if ENABLE(WML)
if (isWMLDocument()
&& extId != "-//WAPFORUM//DTD WML 1.3//EN"
&& extId != "-//WAPFORUM//DTD WML 1.2//EN"
&& extId != "-//WAPFORUM//DTD WML 1.1//EN"
&& extId != "-//WAPFORUM//DTD WML 1.0//EN")
handleError(fatal, "Invalid DTD Public ID", lineNumber(), columnNumber());
#endif
这里按照规范只处理了大写,因此我们应该把出过来的extId转成大写:
#if ENABLE(WML)
extId = extId.upper();
if (isWMLDocument()
&& extId != "-//WAPFORUM//DTD WML 1.3//EN"
&& extId != "-//WAPFORUM//DTD WML 1.2//EN"
&& extId != "-//WAPFORUM//DTD WML 1.1//EN"
&& extId != "-//WAPFORUM//DTD WML 1.0//EN")
handleError(fatal, "Invalid DTD Public ID", lineNumber(), columnNumber());
#endif
这样就ok了。
注意:如果编译的时候出现
external/webkit/WebCore/page/Console.cpp: In member function 'WebCore::String WebCore::Console::lastWMLErrorMessage() const':
external/webkit/WebCore/page/Console.cpp:296: error: 'class WebCore::Page' has no member named 'inspectorController'
时,需要去更改external/webkit/webcore/page/Console.cpp中lastWMLErrorMessage()方法:
#if ENABLE(WML)
String Console::lastWMLErrorMessage() const
{
Page* page = this->page();
if (!page)
return String();
// const Vector<ConsoleMessage*>& consoleMessages = page->inspectorController()->consoleMessages();
// if (consoleMessages.isEmpty())
// return String();
// Vector<ConsoleMessage*>::const_iterator it = consoleMessages.begin();
// const Vector<ConsoleMessage*>::const_iterator end = consoleMessages.end();
// for (; it != end; ++it) {
// ConsoleMessage* message = *it;
// if (message->source() != WMLMessageSource)
// continue;
// return message->message();
// }
return String();
}
#endif
webkit jni 层在extenal/webkit/webkit/android 目录
参考:
http://blog.csdn.net/hxwwf/article/details/7344280
http://seya.iteye.com/blog/931289
http://blog.csdn.net/weiyouyin/article/details/5739659
http://blog.csdn.net/perfectpdl/article/details/7073786
- 大小: 16.2 KB
分享到:
相关推荐
运行`SAXValidator.validateXMLAgainstDTD("invalid_dtd2.xml", "my.dtd")`,如果XML文档不符合DTD的规定,`DefaultHandler`的相应方法将打印出错误信息。 此外,DOMValidator.java可能是一个使用DOM(Document ...
AssertionError: Invalid device id 仔细检查后发现原来服务器有多个GPU,当时开启了两个进行加速运算。 net1 = nn.DataParallel(net1, device_ids=[0, 1]) 而本地台式机只有一个GPU,调用数量超出所以报错。 改为 ...
在IT领域,遇到“打开vs提示invalid handle”的问题并不罕见,这通常意味着Visual Studio(简称VS)在尝试访问某些资源或执行特定操作时遇到了错误。此类问题可能源于多种因素,包括但不限于权限问题、系统资源冲突...
Invalid Campaign ID(解决方案).md
Invalid Broker ID(处理方案).md
Invalid Device ID(解决方案).md
Invalid Channel ID(处理方案).md
Invalid Container ID(处理方案).md
Invalid Edge ID(解决方案).md
Invalid Port ID(解决方案).md
Invalid Node ID(解决方案).md
Invalid Object ID(解决方案).md
Invalid Queue ID(亲测可用).md
Invalid Port ID(亲测可用).md
Invalid Device ID(亲测可用).md
Invalid Lcore ID(亲测可用).md
Delphi 10.3 ,程序运行到DataModule2.ClientDataSet1.ApplyUpdates(0);语句时,提示“Invalid parameter”错误
Invalid Multibyte Character Sequence 警告解析 在编程中,特别是在嵌入式系统开发中,我们经常会遇到Invalid Multibyte Character Sequence 警告。这个警告通常来自于编译器,告知我们存在非法的多字节字符序列。...