訪問file:
協議在鉻使用XMLHttpRequest()
或<link>
元素沒有--allow-file-access-from-files
標記設置在鉻實例啓動默認情況下未啓用。
--allow-file-access-from-files
默認情況下,文件://的URI無法讀取其他文件://的URI。對於需要舊測試行爲的開發人員,這是一個 覆蓋。
目前,由於安全策略鉻離不開--allow-file-access-from-files
讀通過AJAX本地 文件。但我 當前需要創建一個Web應用程序,其中數據庫是一個 xml文件(極端情況下,json),位於一個目錄 index.html。據瞭解,用戶可以在本地運行該應用程序 。是否有解決方法來讀取xml-(json-)文件,而不包括 將其封裝在函數中並更改爲js擴展名?
如果用戶知道本地文件是由應用程序使用,您可以利用用戶<input type="file">
元素上傳用戶從本地文件系統中,使用FileReader
工藝文件的文件,然後繼續操作。
否則,建議用戶使用應用程序需要啓動鉻設置標誌,可以通過爲此創建啓動程序來完成,爲鉻實例指定不同的用戶數據目錄。發射器可以是,例如
/usr/bin/chromium-browser --user-data-dir="/home/user/.config/chromium-temp" --allow-file-access-from-files
參見How do I make the Google Chrome flag 「--allow-file-access-from-files」 permanent?
上面的命令也可以在terminal
$ /usr/bin/chromium-browser --user-data-dir="/home/user/.config/chromium-temp" --allow-file-access-from-files
而不創建桌面啓動程序運行;當鉻的實例關閉時運行
$ rm -rf /home/user/.config/chromium-temp
刪除鉻的實例的配置文件夾。
一旦設置了標誌,用戶可以包括與rel="import"
屬性<link>
元素和href
指向本地文件和type
設置爲"application/xml"
,比XMLHttpRequest
其他選項來獲取文件。使用
const doc = document.querySelector("link[rel=import]").import;
見Is there a way to know if a link/script is still pending or has it failed訪問XML
document
。
另一種選擇,雖然更多地參與,是使用requestFileSystem
向文件存儲在LocalFileSystem
。
見
或者創建或修改Chrome應用和使用
chrome.fileSystem
硒e GoogleChrome/chrome-app-samples/filesystem-access。
最簡單的方法是通過肯定的用戶操作提供文件上傳的方法;處理上傳的文件,然後繼續應用程序。
const reader = new FileReader;
const parser = new DOMParser;
const startApp = function startApp(xml) {
return Promise.resolve(xml || doc)
};
const fileUpload = document.getElementById("fileupload");
const label = document.querySelector("label[for=fileupload]");
const handleAppStart = function handleStartApp(xml) {
console.log("xml document:", xml);
label.innerHTML = currentFileName + " successfully uploaded";
// do app stuff
}
const handleError = function handleError(err) {
console.error(err)
}
let doc;
let currentFileName;
reader.addEventListener("loadend", handleFileRead);
reader.addEventListener("error", handleError);
function handleFileRead(event) {
label.innerHTML = "";
currentFileName = "";
try {
doc = parser.parseFromString(reader.result, "application/xml");
fileUpload.value = "";
startApp(doc)
.then(function(data) {
handleAppStart(data)
})
.catch(handleError);
} catch (e) {
handleError(e);
}
}
function handleFileUpload(event) {
let file = fileUpload.files[0];
if (/xml/.test(file.type)) {
reader.readAsText(file);
currentFileName = file.name;
}
}
fileUpload.addEventListener("change", handleFileUpload)
<input type="file" name="fileupload" id="fileupload" accept=".xml" />
<label for="fileupload"></label>
如果cookie無法爲預期用途存儲足夠的數據,那麼[local storage](https://developer.mozilla.org/en -US /文檔/網絡/ API /窗/ localStorage的)? –
目前我還不清楚你需要什麼,'通過插件或其他東西在Chrome中加載xml/json沒有函數?'請詳細說明一下。 –
可能的重複http://stackoverflow.com/questions/7949752/cross-browser-javascript-xml-parsing –