【问题标题】:Change file extension if browser is IE如果浏览器是 IE,则更改文件扩展名
【发布时间】:2010-06-18 14:35:14
【问题描述】:

我正在寻找仅当浏览器是 IE 时动态更改某些图像扩展名(从 .svg 到 .png)的最佳解决方案。

我不知道什么是最好的解决方案:

  • 用PHP解析html代码
  • 将 jQuery 与类似的东西一起使用

    $("img.svg2png").attr("src", ...);

  • 处理htaccess和重写规则

  • 其他解决方案?

谢谢!

【问题讨论】:

  • 取决于您输出 URL 的方式/位置?
  • 理论上,您可以使用内容协商(MultiViews),但至少 Opera 声称它更喜欢接受标头中的 png 而不是 svn 文件。
  • 无论你做什么,不要为 IE9 做,因为它实际上支持 SVG。

标签: php javascript jquery .htaccess


【解决方案1】:

你没有透露很多关于你在做什么的细节,但是 mod_rewrite 解决方案(捕获 USER_AGENT 变量并检查它是否是 IE,并在内部重定向到匹配的 .png 文件)听起来最优雅对我来说,因为它可以在没有 JavaScript 的情况下工作,并且您可以保留文件扩展名。只要发送了正确的Content-Type 标头,.svg 扩展名就应该没有意义。

【讨论】:

  • @Pekka 我必须将我的 转换为 我会试试你的解决方案,谢谢!
  • @Kaaviar 不客气。使用 mod_rewrite,您不必转换 URL。它始终是img1.svg,但如果它是 IE,则会以该名称提供 PNG。
  • 对不起,这听起来不太专业。为什么要依赖用户代理嗅探,什么时候可以使用内容协商。这至少是维基百科所做的。
  • @mario 如果可以使用内容协商获得可靠的结果,太好了!为什么不添加一个概述它是如何完成的答案?我很想看看。
  • @Pekka:好吧,刮一下。甚至我的 Firefox 也发送了一个愚蠢的标题。 Accept:image/png,image/*;q=0.8,/;q=0.5 - 所以在 Firefox 中 PNG 总是优先于 SVG。可能可以将 qs= 值与 Apache 的 .var 类型映射一起使用,但这太费力了。所以我想知道维基百科到底是怎么做到的。
【解决方案2】:

你可以这样做:

var imageArray = $('img.svg2png').attr('src').split('.');
var newImage = imageArray[0]+'.png';

$("img.svg2png").attr("src", newImage);

请记住,这是假设您在文件的完整 src 中只有 1 个句点(即扩展句点)

为了分解它,.split('.') 所做的是创建一个字符串数组,其中句点是一个分隔符。所以

imageArray[0] = 'imagesDir/imageName'

imageArray[1] = 'svg'

所以你正在做的是用图像的第一部分和一个新的扩展来重建 src。

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 2012-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-10
    • 2013-05-20
    • 1970-01-01
    • 1970-01-01
    • 2016-07-31
    相关资源
    最近更新 更多