javascript - 在 iFrame 中打开 CSS 文件时阻止浏览器提示文件下载?

标签 javascript css iframe

我有一个网络应用程序可以将任意页面或文件加载到 iFrame 中。

在某些浏览器下,当将 iFrame 的 src 指向 css 文件时,不会显示 css 文本,而是出现“下载/打开文件”提示。

有什么办法可以避免这种情况吗?我理解默认情况下不下载或打开非文本文件的有效安全原因,但 css 文件或任何文本/* 文件类型应该足够安全(实际上比 HTML 更安全!)

css 文件的响应 header 如下所示:

Content-Type: text/css; charset=utf-8
Status: 304 Not Modified
X-Powered-By: Phusion Passenger (mod_rails/mod_rack) 2.2.4
Etag: "34b924980254e212b651bcae25da011e"
Last-Modified: Thu, 04 Feb 2010 11:01:59 GMT
X-Runtime: 0.11366
Server: nginx/0.7.62 + Phusion Passenger 2.2.4 (mod_rails/mod_rack)
Content-Encoding: gzip

200 OK

现在我知道我可以使用 XHR 而不是 iFrame 来获取文本然后显示它,但是在这个应用程序中,内容可以是任何东西,由用户在运行时确定,而不是预定义的一组页面/文件。它需要在 iFrame 中,而不是将 XHR 响应加载到父窗口中的 div 中,因为加载的页面可能有一些依赖于正确位置字符串的 javascript(例如分析、广告、基于 javascript 的博客/评论系统)等)。

另一个选择是 XHR 来计算文件类型,然后

  • 如果是 HTML,则为 iFrame 设置 src 属性,或者
  • 如果是纯文本,则将响应内容复制到 iFrame 中
  • 如果是二进制文件什么都不做

该解决方案的问题在于,在第一种情况下,我最终需要发送两个请求而不是一个。优点是我可以完全忽略二进制文件,尽管在此应用程序中,用户会尝试将 HTML 或其他纯文本页面以外的任何内容加载到框架中是值得怀疑的。

我很确定不会有一个简单的解决方案(如果有的话),但是没有比这里更好的地方了,所以......

2010 年 2 月 12 日编辑:

由于缺乏答案,我假设我最初的假设是正确的(没有办法做到这一点,如果有的话),因此唯一的解决方案是要么完全忽略这个问题(不理想),要么使用我的建议XHR 的方法来确定响应类型,并且仅在 HTML 时加载到框架中。同样,这并不理想,但如果浏览器缓存了 XHR 响应,这会让事情变得更好一些,所以:

有谁知道浏览器是否通常会缓存 XHR 响应,以便如果随后将相同的 url 加载到 IFRAME 中,则会使用缓存的版本?我意识到这取决于浏览器和设置,但是例如 IE 和 Firefox 具有开箱即用的设置会这样做吗?

最佳答案

要将文件逐字显示为纯文本,我只需将其发送为

Content-Type: text/plain; charset=utf-8

关于javascript - 在 iFrame 中打开 CSS 文件时阻止浏览器提示文件下载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2199269/

相关文章:

javascript - else 语句不能正常工作

javascript - css 将阴影切换到文本的背面

asp.net - 如何从 C# 代码隐藏设置 iframe 的最小高度?

html - 使用 html 的 iframe 菜单

javascript - jQuery : How to fill the input form automatically from text on webpage?

javascript - jquery li位置返回零

javascript - 自动调整网格列的宽度以显示所有数据

javascript - 为什么 serializeArray() 返回小回车箭头而 val() 不返回?

html - 如何将 img 与文本内联

html - 虚线框