我正在尋找一種方法來允許用戶使用標準元素選擇文件,並允許瀏覽器跨頁刷新持續訪問該文件和/或瀏覽器實例。Javascript持久訪問跨瀏覽器實例的本地文件/頁面刷新
場景:
- 我們有,我們要授權給用戶一個Web應用程序。
- 我們希望將用戶保存的許可證文件發送給本地計算機。
- 他們訪問我們的Web應用程序的第一次,他們使用的字段選擇其計算機
- 他們訪問應用程序(它們是否關閉瀏覽器,重新啓動計算機等),其後每一次在本地許可文件,它可以直接讀取許可證文件,而無需用戶重新選擇文件。
我們不希望使用localStorage來存儲整個文件,因爲文件的最大大小不受限制,並且可能會超出localStorage的大小限制。
我已經部分成功:只要原始瀏覽器選項卡打開,任何其他瀏覽器實例或選項卡都可以訪問該文件並讀取它。但是,如果原始選項卡關閉,則本地文件URL將被銷燬。
以下是我做的很:
- 當用戶從一個領域的文件,使用window.createObjectURL()函數來選定文件創建一個URL對象。
- 保存在localStorage的
這個對象URL每當另一個瀏覽器實例/標籤訪問該網址,它可以加載使用XHR對象和的FileReader對象的文件。這裏的代碼位:
var xhr = new XMLHttpRequest();
console.log("Reading URL: " + localStorage.savedFile);
xhr.open('GET', localStorage.savedFile, true);
xhr.responseType = 'blob';
xhr.onreadystatechange = function(e)
{
if (xhr.readyState == 4)
{
var myBlob = this.response;
console.log(myBlob);
var f = new FileReader();
f.onload = function(e) { console.log(e); alert("Data read: " + e.target.result); };
f.readAsText(myBlob);
}
};
xhr.send();
正如你所看到的,XHR對象獲得一個blob回來,可以直接發送該給的FileReader對象讀取數據。
只要原始選項卡(他們選擇文件的那個選項卡)打開,此功能就完美了。但顯然,由createObjectURL()生成的URL在選項卡關閉時會被銷燬(這從垃圾收集的角度來看很有意義)。
任何人都可以想到一種方法來保持跨實例/選項卡URL不需要保持原始選項卡打開,並允許訪問相同的本地文件,而無需用戶每次訪問時手動選擇它應用程序嗎?
另外,我知道FileSystem API(https://developer.mozilla.org/en-US/docs/WebGuide/API/File_System#Browser_Compatibility),但它看起來已經死了(http://lists.w3.org/Archives/Public/public-webapps/2014AprJun/0010.html),並且在瀏覽器中不可預知。 –
您最終找到了解決方案嗎? –
不,不幸的不是。你是否? –