6

有沒有方法可以確定瀏覽器是否支持將超鏈接的數據URI用於瀏覽器嗅探?如何確定瀏覽器是否支持超鏈接的數據URI

這裏的背景:

我創建一個鏈接或者下載的使用得心應手數據URI或通過JavaScript產生的信息的CSV文件,如果瀏覽器不支持使用數據URI的超鏈接,生成所需內容的HTML表格。

現在我的代碼檢查window.URL屬性的存在,它不存在於IE9及更低版本中。 (這是工作好了,現在,是因爲我需要支持IE用戶在兼容模式下,其模擬IE8運行。)

if(window.URL){ 
    downloadLink.href = "data:text/csv;charset=utf-8," + encodeURIComponent(data); 
    downloadLink.setAttribute("download","download.csv"); 
}else{ 
    downloadLink.href= "#"; 
    downloadLink.innerHTML = "table view"; 
    downloadLink.onclick = function(){ 
     // build and display HTML table 
     return false; 
    }; 
} 

然而,有與Internet Explorer(10,11的新版本有一些重疊,以及邊緣),因爲它們支持window.URL對象,但是做而不是允許超鏈接的數據URI。

如何確保下載CSV的鏈接永遠不會顯示給不支持這種幻想的瀏覽器?

+0

請參閱http://stackoverflow.com/questions/836777/how-to-detect-browsers-protocol-handlers,http://stackoverflow.com/questions/24779312/simplest-cross-browser-check-if-協議處理程序-被登記 – guest271314

回答

0

我相信我找到了答案。嘗試檢測<a>元素上是否存在download屬性。

var browserSupportsDataURIsForHyperlinks = 
    typeof document.createElement("a").download !== "undefined"; 

var browserSupportsDataURIsForHyperlinks = 
    "download" in document.createElement("a"); 

...就我而言,我已經有一個錨標記(downloadLink)工作,所以我並不需要創建一個新的:

if(typeof downloadLink.download !== "undefined"){ 
    downloadLink.href = "data:text/csv;charset=utf-8," + encodeURIComponent(data); 
    downloadLink.setAttribute("download","download.csv"); 
}else{ 
    downloadLink.href= "#"; 
    downloadLink.innerHTML = "table view"; 
    downloadLink.onclick = function(){ 
     // build and display HTML table 
     return false; 
    }; 
} 

如果有人發現這種方法有什麼問題,請告訴我。

相關問題