今天发现 camel 项目中的输入框当插入自定义表情的时候,如果此时web server没有开启,就无法正常显示,因为我们已经将这些表情图片加入到html5的manifest清单中了,所以有点疑惑。
先讲下背景
1. 所有业务代码均采用html,js,css完成
2. 所有聊天对话框均处于chatcontainer.html
chatcontainer 含有一个tab ctrl,每个tab btn 对应一个div,这个div 从一个模板html加载。
这些具体可以了解dojo的_template机制。
3. 这个模板html简单来说分为上下两个部分,上部是一个历史记录信息来自于一个xx.html
下部是一个editor,这个editor 并非直接来自某个html文件而是来自于一个字符串。
相当于这个xxx,实际上是一个html 内容,并非是url。
4. webkit 加载图片资源时候有两重cache
a) imagecache
b) appcache (当然这个是我们项目启用了html5 offlineapp 机制后的效果)
我拿到这个问题的时候,首先查看了cachedb文件发现目标gif的url确实存在于db文件,且内容也是有的。
且能够验证这个gif当以独立的url在camel项目中打开时候cache机制是有效的。
之后打开webkit 工程,attach出问题时候的进程,结果发现
bool ApplicationCacheHost::shouldLoadResourceFromApplicationCache(const ResourceRequest& request, ApplicationCacheResource*& resource)
{
ApplicationCache* cache = applicationCache();
if (!cache || !cache->isComplete())
return false;
...............
上面代码的红色部分表示这个cache=null, 这个很奇怪,这样直接导致了对这个gif url的访问,无法使用cache机制,尽管这个时候cache是有的。
继续调试发现这个editor 所在的iframe用法很特别,它的src=about::blank 但是内容是dojo用js生成出来的,就是
阅读(394) | 评论(0) | 转发(0) |