微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – Html 5 manifest不能正常工作iFrame

我有一个应用程序有几个C#项目,如下

> CRM.DomainLogic
> CRM.Web
> Warehouse.DomainLogic
>仓库网
>,…

每个Web项目如CRM.Web都有自己的“html视图”和“js控制器”
并且还有其他几种类型的静态文件.

为了方便部署,我想使用Html5清单.

所以,为了使项目分开部署,我已经使用了iframe.
由于CRM.Web的变化,客户端将获得CRM文件,并且不需要再次下载Warehouse.Web文件

脚步:

1-我有一个Web API方法返回Web程序集的所有名称,例如CRM.Web和Warehouse.Web

2-我有一个Web API方法,将程序集名称作为参数,并返回指向位于该项目的文件的清单文件内容.

public HttpResponseMessage GetManifestByAssemblyName(String assemblyName)

这里省略了代码.

response.Content = new StringContent(manifestBody.ToString(),Encoding.UTF8,"text/cache-manifest");

3-在客户端我为每个程序集创建一个新的iFrame,并将src设置为另一个web api方法,该方法返回html正文,将其清单分配给返回清单体的WebAPI方法的地址(GetManifestByAssemblyName)

String result = String.Format
        (@"<html manifest='{0}'> </html>","/api/AppManifest/GetManifestByAssemblyName?assemblyName=" + assemblyName + ".manifest");

    response.Content = new StringContent(result,UTF8Encoding.Default,"text/html");

iFrames的代码

var htmlPageUrl = "/api/AppManifest/GetHtmlContainerForManifestByName?assemblyName=" + name;

                    var iFrame = document.createElement("iFrame");
                    iFrame.setAttribute("src",htmlPageUrl);
                    iFrame.setAttribute("sandBox","allow-same-origin");
                    iFrame.setAttribute("seamless","seamless");
                    document.body.appendChild(iFrame);

当我运行应用程序时,它会获得程序集名称,然后创建iFrames,并且每个iFrame自动获取其自己的清单.

但是window.applicatioCache.status是0,这意味着它没有缓存.

当我去资源页面,我可以看到以下内容

但是当我请求缓存的那些文件之一时,请求不会使用缓存.

我知道我的工作在网络上没有参考,这完全是基于我的想法,我知道一些安全限制可能会出现在这里,但有什么解决方案来解决问题?

提前致谢.

注意:You can download sample application source code here.

然后按Ctrl S保存文件,首先阅读Index.html注释.

解决方法

我试过你的示例项目.我不得不将sandBox属性更改为allow-scripts,否则Chrome会阻止来自iFrame的JS执行.

除此之外,我认为你的缓存正常工作.见下面的截图.

我认为您的困惑的根本原因是您正在检查主文档的appCache状态,该状态没有清单.清单是用于加载iFrame中的文档.所以在Chrome中,如果切换到个人iFrame并检查状态,它会显示Idle(1),这意味着缓存是活动的!见下文:

希望这可以帮助!

原文地址:https://www.jb51.cc/csharp/93264.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐