c# – Html 5 manifest不能正常工作iFrame
我有一个应用程序有几个C#项目,如下
> CRM.DomainLogic 每个Web项目如CRM.Web都有自己的“html视图”和“js控制器” 为了方便部署,我想使用Html5清单. 所以,为了使项目分开部署,我已经使用了iframe. 脚步: 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),这意味着缓存是活动的!见下文: 希望这可以帮助! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |