> CRM.DomainLogic@H_403_3@> CRM.Web@H_403_3@> Warehouse.DomainLogic@H_403_3@>仓库网@H_403_3@>,…
每个Web项目如CRM.Web都有自己的“html视图”和“js控制器”@H_403_3@并且还有其他几种类型的静态文件.
为了方便部署,我想使用Html5清单.
所以,为了使项目分开部署,我已经使用了iframe.@H_403_3@由于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注释.