3

问题:苹果 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 特有的,因为我的 web 应用程序使用适用于苹果产品(iphone/ipad)的 chrome 在线/离线运行。不过,仍在寻找 safari 浏览器的修复/解决方法...

4

1 回答 1

0

对于 Safari/iPad,清单文件必须以 .manifest 结尾。至少,这是我的测试确定的。

因此,为了完成这项工作,您必须使用 HttpHandler 动态生成 .manifest 文件,并在 web.config 中进行一些更改以将 cache.maifest 映射到处理程序。这个想法是,对不存在的 cache.manifest 的调用实际上会被映射到处理程序,然后它会发回动态内容。

这是目前我坚持的部分,所以我还不能在这里帮助你。

于 2013-07-10T18:54:34.960 回答