2011-06-05 154 views
2

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

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

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

+0

你也不能依赖浏览器的名字,因为如果它有插件,可以启用/禁用该功能 – 2016-08-23 09:38:27

回答

2

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

希望这有助于

+0

谢谢,但这是客户端,我需要一个服务器端解决方案。 – amateur 2011-07-21 20:44:55

+3

您无法确定服务器端是否支持客户端。 – 2011-07-22 19:30:15

+2

你不能处理这个服务器端,一个简单的窍门是把一个只有javascript的空白页面检查可用的类型,然后js代码将浏览器移动到真正的页面,使用window.location在URL中添加你的格式。 HREF。我知道这是一个窍门,但它应该起作用。 – wezzy 2011-07-24 14:39:51

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事件将被触发。

+0

onerror似乎更可靠。 – vvo 2012-05-18 15:23:06

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.

相关问题