2015-10-18 50 views
4

在IE和Microsoft Edge(Data URI link <a href="data: doesn't work in Microsoft Edge)中不支持在鏈接中使用數據URI(<a href="data:)。在支持Modernizr的鏈接中檢測數據URI

我試圖用Modernizr來檢測鏈接支持中的數據URI。

Modernizr.datauri不是我正在查找的內容,因爲它沒有告訴鏈接中支持數據URI的任何內容,例如,對於Microsoft Edge,它返回對象{over32kb: true}

如何檢測使用Modernizr如果鏈接中的數據URI在瀏覽器中受支持?

+3

您可以通過向數據URI發送Ajax請求來蠻力。 IE和Edge會發生異常。除此之外,我不確定... – BoltClock

回答

2

我對功能檢測的需求相同,但我沒有使用Modernizr。我的用例是我使用makePDF庫在客戶端生成pdf,但無法使用IE或Edge中的數據URI打開PDF。不幸的是,我能找到的所有功能檢測腳本都在測試支持圖像的數據URI(這是由MS瀏覽器支持的),所以我必須自己寫。這裏的(爲理念由於BoltClock的評論以上)的代碼:

checkDataURISupport(function (checkResult) { 
 
    if (checkResult) { 
 
     alert('Files in data URIs are supported.'); 
 
    } else { 
 
     alert('Files in data URIs are NOT supported.'); 
 
    } 
 
}) 
 

 
function checkDataURISupport(callback) { 
 
    try { 
 
     var request = new XMLHttpRequest(); 
 
     request.onload = function reqListener() { 
 
      callback(true); 
 
     }; 
 
     request.onerror = function reqListener() { 
 
      callback(false); 
 
     }; 
 
     request.open('GET', 'data:application/pdf;base64,cw=='); 
 
     request.send(); 
 
    } catch (ex) { 
 
     callback(false); 
 
    } 
 
} 
 

 
checkDataURISupport()

我測試在IE 11,邊緣25,火狐46和Chrome 49.

作爲側面說明,另一個SO回答(https://stackoverflow.com/a/26003382/634650)使用建議:

supportsDataUri = 'download' in document.createElement('a'); 

這在IE,但沒有優勢。

更新

的SO回答上述的組合也包含了有關特徵檢測在iframe支持鏈接到引用a SO answera Modernizr issue數據URI。在iframe中打開數據URI與在新窗口中打開數據URI基本相同,不支持在iframe中支持數據URI的Microsoft瀏覽器不支持在新窗口中打開它們。此外,在這些位置提到的iframe支持測試是同步的,所以我建議使用它來代替我的異步解決方案。

+0

很好的解決方案創建解決方法,謝謝你回答我的老問題! :) –

+0

這給了我現在邊緣誤報。 – kzh

0

奇怪的是,即使Microsoft Edge不支持數據URI。舊版本的IE only allows base64 encoded images of up to 32KB。我最近遇到了一個參考鏈接,它與您提到的類似問題Moderinzr有關。

Does modernizr check for data uri's?#294

看來they have added a patch for the issue。這是一個數據URI測試。

This post對此問題有類似的答案。我希望這些修補程序應該可以貫穿始終。

+2

欣賞您的回覆,但它似乎並不是我要找的。我的quiestion不是關於數據URI支持,而是關於鏈接**中的數據URI **。 Edge支持圖像或CSS中的數據URI,但不支持鏈接。 –

+0

嗯嗯,好吧。那麼數據URI的部分在微軟的瀏覽器中得到了支持。對於除IE-8以外的所有(邊緣),'over32kb'是'Modernizr.datauri'的子屬性,'true'。沒有太多的話要說,但我相信你可能需要爲這個(@ __ @) – Rohit416