检查浏览器是否在运行时支持数据uri

时间:2011-06-05 20:11:56

标签: request base64 data-uri httpbrowsercapabilities

我希望在我的asp.net c#web应用程序中使用数据uri base 64字符串。我知道只有一些浏览器支持这个,所以在运行时我需要检查当前浏览器是否支持base 64字符串。

从用户请求对象中,我可以访问描述当前浏览器的HttpBrowserCapabilitiesWrapper对象。

如果浏览器支持uri的数据,是否有可能找到这个?或者如果不是基于这个对象,有没有办法在运行时我可以检查浏览器是否支持数据uri?

3 个答案:

答案 0 :(得分:4)

您无法确定浏览器是否支持服务器端的数据uri。 HttpBrowserCapabilitiesWrapper不提供该信息。根据我的知识,除IE(< 7版本)之外,所有浏览器都支持base 64编码的字符串。如果您不想编写特定于浏览器的代码,您基本上可以使用试错法来处理这种情况。

<img src="data:image/gif;base64,..." onabort="function(){this.src='urlWhichWillRenderBinaryData'}" onerror="function(){this.src='urlWhichWillRenderBinaryData'}" />
如果图像渲染不正确,将触发

onabort / onerror事件。

答案 1 :(得分:2)

看看this link,简单地说它试图使用数据uri加载图像,如果大小错误则意味着你的浏览器不支持数据uri然后你必须回滚到备份解决方案。

希望这有帮助

答案 2 :(得分:2)

ShankarSangoli's answer可能无法正常工作。例如,IE 6将尝试加载src并在分配onerror函数之前触发onerror事件。

要使其工作,您应该在设置src值之前分配onerror(不能完全在标记中完成):

标记:

<img data-uri="{data-uri-value}" data-fallback-url="{fallback-url}" class="imageuri" />

jQuery的:

$('.imageuri').each(function () {
    this.onabort = this.onerror = function () {
        $(this).attr('src', $(this).attr('data-fallback-url'));
    };
    $(this).attr('src', $(this).attr('data-uri'));
});

在IE 6,IE 9和Chrome 16中测试过。