2013-10-22 36 views
1

我正在使用FileSaver.js文件將我的畫布保存爲圖像。下載後我必須關閉窗口。有什麼辦法可以做到這一點?FileSaver.js文件保存後的關閉窗口

這裏是我的代碼是什麼我都試過了,

canvas.toBlob(function (blob) { 
    saveAs(blob, "RQGantt.png"); 
    window.close(); 
}); 

它的正常工作與圖像的尺寸小。但是當我有一個大尺寸的圖像時,我的窗口在開始下載之前關閉。

有沒有辦法在客戶端做到這一點?

+0

也許你應該在GitHub頁面發佈一個問題。開發者看起來很活躍:https://github.com/eligrey/FileSaver.js/issues?state = open - 通常這種事情是在'onComplete'風格的回調中處理的,但是沒有進入插件本身的源代碼,我不能告訴你這樣的回調是否存在。 –

+0

爲什麼不在「saveAs」函數中添加回調函數,因此只有在saveAs函數完成後纔會關閉窗口?例如http://jsfiddle.net/gH8FY/ – Latheesan

回答

1

這是他們爲https://github.com/eligrey/FileSaver.js/issues/52問題提供的回覆。

不幸的是,JS不能告訴當文件已經完成保存,因此 用戶將不得不關閉新的標籤可能使內容被保存。

所以,我已經做了以下的解決方法

window.onbeforeunload = function() { 
    //For IE 
    if (HTMLCanvasElement.prototype.msToBlob && window["ganttBlob"]) 
     saveAs(ganttBlob, "imageName.png"); 
} 

canvas.toBlob(function (blob) { 
    window.ganttBlob = blob; 
    // For Non IE Browser 
    if (!canvas.msToBlob) { 
     saveAs(blob, "imageName.png"); 
     setTimeout(function() { 
      window.close(); 
     }, 500); 
    } 
    else //For IE 
     window.close(); 
}); 

所以,現在連窗口已經關閉,下載提示選項將自帶。

1

中的鏈接,你所提供的網頁說:

FileSaver.js實現在本身不支持它的瀏覽器的HTML5 W3C的saveAs()FileSaver接口。

所鏈接的頁面,指着規格爲filesaver表示,它支持以下顯著事件:

型功能

處理器爲writeend事件onwriteend。

這就是你需要使用的。保存操作,就像javascript中最重要的事情一樣,是一個異步事件。

你想趕上寫操作結束,然後關閉窗口:

canvas.toBlob(function (blob) { 
    var filesaver = saveAs(blob, "RQGantt.png"); 
    filesaver.onwriteend = function() { window.close(); } 
} 

編輯

不幸的是,看起來這是不可用。請參閱:https://github.com/eligrey/FileSaver.js/issues/1

也許您可以要求插件的作者重新審視該問題。

我可以建議的最好的方式是添加一個按鈕,讓用戶單擊關閉。點擊後,你可以調用abort,如github頁面所示,假設它已經完成,它會完全退出。然後做一個window.close。