2011-06-05 117 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.

相關問題