问题: Apple ipad和iphone中的浏览器似乎不喜欢动态生成的清单文件(我们经常会遇到错误,涉及可以从设备访问的丢失图像或.aspx页面或“无法获取应用程序缓存清单”)。我们最初有一个manifest.ashx作为我们的清单,它将动态创建和从Web服务器中提取一些部分以用于脱机应用程序功能。这个过程适用于大多数浏览器和移动设备,但苹果产品失败了。
思考:由于某种原因,safari似乎没有正确注册manifest.ashx(这是我们动态创建清单文件的地方)并且只是放弃尝试打开它。我们确实需要一个动态清单文件来满足项目的需求,因此切换到静态清单文件是行不通的。有没有人对动态清单文件的替代创建方法有任何建议?
代码: manifest.ashx
public class Manifest : IHttpHandler
{
public void ProcessRequest( HttpContext context )
{
ManifestGenerator generator = new ManifestGenerator();
context.Response.ContentType = "text/cache-manifest";
//Create the dynamic manifest file here (returns the manifest as a string)
context.Response.Write( generator.GenerateManifest() );
context.Response.Flush();
}
}
谢谢,
更新思考v1:倾向于认为这可能是设备特定的清单故障,因为所有其他移动和桌面设备都正常访问应用程序(包括能够脱机)。目前我已经回到动态生成的清单(在manifest.ashx中),并且ipad / iphone在尝试获取时仍然死亡,但它确实比以前更进一步(错误是:“应用程序缓存更新失败,因为“文件路径在这里”无法获取“)。一个奇怪的是,safari的桌面版本处理网络应用程序就好了(以及在ipad上安装chrome没有访问网站上/下线的麻烦),而它的移动版本没有
更新的想法v2:似乎这个问题是特定于Safari的,因为我的网络应用程序在线/离线运行带有Chrome的苹果产品(iphone / ipad)。仍在为Safari浏览器寻找修复/解决方法......
答案 0 :(得分:0)
对于Safari / iPad,清单文件必须以.manifest结尾。至少,这就是我的测试所确定的。
因此,为了使这项工作,您必须使用HttpHandler动态生成.manifest文件,并在web.config中进行一些更改,以将cache.maifest映射到处理程序。这个想法是对不存在的cache.manifest的调用实际上会映射到处理程序,然后处理程序将发回动态内容。
这是目前我坚持的部分,所以我在这里无法帮助你。