2014-02-24 39 views
2

我試圖從一個畫布保存SVG作爲使用JavaScript的PNG文件。 下面的代碼似乎在Chrome和Firefox上正常工作,但在IE 10中,我在控制檯中得到了下面的錯誤。IE 10:SCRIPT5:訪問被拒絕錯誤主播單擊事件

SCRIPT5:訪問被拒絕。

找到下面的代碼,我用:

var image = canvas.toDataURL("image/png").replace("image/png", "image/octet-stream"); 

var a = $('<a>').attr("href", canvas.toDataURL("image/png")).attr("download", title + "png").appendTo($('#VisitsContainer')); 

a[0].click(); 
a.remove(); 

控制檯指向我試圖調用Click事件。

+0

我不認爲你可以強制點擊與下載attr錨點,這將是侵入性的,也許這是問題? IE更謹慎? – enapupe

回答

6

download屬性未在Internet Explorer中實現。

http://caniuse.com/download

對於Internet Explorer,可以使用 「另存爲」 命令。

的說明有關安全:

瀏覽器服務2個主人。

瀏覽器必須滿足用戶的請求,將內容保存到本地驅動器。

瀏覽器還必須限制潛在的惡意代碼自動將位下載到用戶本地驅動器上。

爲了協調這兩項任務,瀏覽器採取了一種方法,即用戶可以在確認過程(如保存按鈕)後將內容下載到本地驅動器。

使用a[0].click();確認用戶運行與瀏覽器提供安全性的嘗試相反。

FileSave.js是一個跨瀏覽器庫,將您的畫布保存到用戶本地驅動器。它通過要求用戶單擊按鈕以確定下載來符合安全問題。

https://github.com/eligrey/FileSaver.js/

+0

謝謝馬克! FileSaver.js非常棒! –

1

Necromancing。
在IE上,您不需要創建鏈接。
創建一個新的Blob就足夠了。

function saveMe(data, fileName) 
{ 

    var json = JSON.stringify(data), 
     blob = new Blob([json], { type: "octet/stream" }), 
     url = window.URL.createObjectURL(blob); 

    if (navigator.msSaveOrOpenBlob) 
    { 
     navigator.msSaveOrOpenBlob(blob, fileName); 
     return; 
    } 
    else if (window.navigator.msSaveBlob) 
    { // for IE browser 
     window.navigator.msSaveBlob(blob, fileName); 
     return; 
    } 

    var a = document.createElement("a"); 
    document.body.appendChild(a); 
    a.style = "display: none"; 

    a.href = url; 
    a.download = fileName; 
    a.click(); 
    window.URL.revokeObjectURL(url); 
} 


var data = { x: 42, s: "hello, world", d: new Date() }, fileName = "my-download.json"; 

// saveData(data, fileName); 
saveMe(data, fileName); 
相關問題