我正在构建一个小部件,我一直在使用iframe来呈现其中的内容.在某些时候,我可能会开始提供第三方HTML和JS,所以我认为iframe是个好主意.
它确实使小部件javascript更复杂,我担心这可能不是最好的实现.
你有什么建议吗?听听其他人对iframe的看法会有很大的帮助.
不,iframe没什么问题.如果您要开始提供第三方内容,那么iframe可能是更好的主意.
即将推出的HTML5规范还计划在这种情况下为iframe构建更多安全功能,所以我认为现在也可以使用它们.
在XMLHTTPRequest被广泛使用之前,人们使用JavaScript和iframe的组合以动态方式提供内容,而无需进行完整页面刷新.
有很多关于以这种方式开发网站的信息,所以你应该有一个相对容易的时间来找到你可能遇到的很多障碍的解决方法.
我发现痛苦的一件事是在iframe中跨域使用JavaScript.如果您嵌入iframe的页面来自与"父"页面不同的域,则浏览器具有安全限制,允许您从另一个页面访问.诀窍在于两个页面都要声明
document.domain = 'somedomain.com';
关于这种解决方法,网上有很多东西.
祝好运!
我最近发现的一件事是嵌入在iframe中的.aspx页面有时会丢失cookie,导致我参与的应用程序中的会话状态丢失.
对我来说,这是一个不同的开发商店在他们自己的页面中消耗我的.aspx页面的场景.这意味着我们在单独的服务器上,这可能是也可能不是显着的.
显然这是由父页面拒绝子页面的cookie引起的......正如会话cookie一样,会话也是如此.
其工作原理的具体机制有点涉及:更多细节
这个问题并没有影响FireFox,但它确实出现在IE7中,这是一个真正神秘的几个小时.
另外,我不得不在一点上与我上面提到的文章相矛盾.文章说,如果包含页面也是.aspx,你就不会得到这个...在这种情况下,这不是真的,因为两个页面都是.aspxs.
这会对文章所说的关于这种情况的所有内容产生一些疑问,但它确实导致了解决方案,所以这也是一些问题.
正如文章所建议的那样,我输入了以下代码,它在页面的Init事件中注入了一个p3p(隐私首选项项目 - 我从未听说过它)标题:
HttpContext.Current.Response.AddHeader("p3p", "CP=\""IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT\""")
......这解决了这个问题.
我将不同意大多数人并且说是的,iframe是一个绝对可怕的想法.任何在网页设计社区工作一段时间的人都会同意iframe是纯粹的邪恶,除非绝对必要,否则应该避免.
我相信他们不好的理由是因为他们打破了网页的导航模式.通过使用iframe,您可以有效地破坏浏览器上的后退和前进按钮,并使您的用户感到困惑.它打破了HTTP协议背后的整个想法; URL始终会导致唯一的位置.如果iframe是一匹马,它很久以前就会退役.还有其他方式可以动态地提供内容,而应该使用这些方法.
如果你正在创建一个小部件,那么使用iframe的直接问题就会消失(对于搜索引擎来说很糟糕,对于书签不好等),但无论哪种方式,内容都会更好地动态提供,甚至可以在新窗口而不是iframe中提供.
我知道,他们只有一个"非常糟糕"的事情.
如果你的第三方做了一些JavaScript,试图过早地修改他们的DOM ... IE6和IE7将抛出哦无助的" 操作中止 "错误,然后不仅删除iframe,而且整个周围的页面.(例如,您的网站显示为低)
它在IE8中没有修复,但崩溃处理得更好.