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

时间:2010-02-04 11:34:59

标签: javascript css iframe

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

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

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

css文件的响应标头如下所示:

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来计算文件类型,然后是

  • 为iFrame设置src属性(如果它是HTML或
  • 将响应内容复制到iFrame中,如果它是纯文本
  • 如果二进制文件
  • 则不执行任何操作

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

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

编辑2010年2月12日:

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

有没有人知道浏览器是否通常会缓存XHR响应,所以如果随后将相同的URL加载到IFRAME中,将使用缓存版本?我意识到这是依赖于浏览器和设置的,但是例如IE和带有开箱即用设置的Firefox会这样做吗?

2 个答案:

答案 0 :(得分:0)

要以纯文本形式逐字显示文件,我只需将其作为

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

答案 1 :(得分:0)

在您的网络应用程序中,您可以拥有一个页面(使用您正在使用的任何语言,假设您不是仅提供静态文件),该页面采用的参数是您要查看的文件的路径,然后在IFRAME中加载

所以不是将IFRAMEs src设置为“somefile.css”(或者它是什么文件),而是将src设置为“FileViewer.php?filepath = / somefile.css”(用选择的语言替换.php) ,然后让FileViewer页面从文件系统加载文件并将其渲染出来,但设置了Content-Type。