簡體   English   中英

訪問同一目錄中的另一個頁面會產生文件:URL的CORS錯誤

[英]Access to another page in same directory yields CORS error with file: URL

我正在嘗試構建一個基於瀏覽器的小應用程序,該應用程序將從文件:URL運行而不使用服務器。 (所以我可以將文件放在閃存驅動器上,只需雙擊HTML文件即可啟動它。)應用程序需要讀取另一個文件,但我嘗試使用的每種方法都會產生CORS錯誤。

我的兩種方法是:

  • 發出AJAX請求
  • 將內容加載到iframe中並嘗試閱讀文檔

它產生以下錯誤:

  • CORS策略阻止了對來自'null'的'file:/// PATHHERE'的XMLHttpRequest的訪問:僅對協議方案支持跨源請求:http,data,chrome,chrome-extension,https。
  • SecurityError:阻止具有原點“null”的幀訪問跨源幀。

根據MDN對原產地的定義

Two URLs have the same origin if the protocol, port (if specified), and host are the same for both.

根據該定義,任何文件:URL都應該是同源的,因此CORS( 交叉原點)不適用。

我發現MDN有一個關於文件的附加頁面:URL表明所需文件必須位於頁面文件的相同或子目錄中才能被視為同源文件。 我發現Firefox也是如此,但Opera,Chrome和Safari似乎不遵循這個想法,而是將所有文件:URL視為交叉來源,即使頁面試圖加載自己的副本!

所以我只能使用Firefox,除了catch是我試圖加載的文件是一個目錄,Firefox將目錄列表視為跨源,即使它是原始頁面所在目錄的子目錄。 錯誤是“跨源請求被阻止:同源策略禁止在file:/// myapp / subdir讀取遠程資源。(原因:CORS請求不是http)。” (雖然我認為它不是跨源的,因此不應該是HTTP。)

那么在任何當前的主要瀏覽器中是否有任何方式(最好是Chrome,因為它可以在我想要使用它的任何地方使用)來獲取文件上的目錄列表:URL?

如果沒有,是否有任何理由不支持,至少對於加載頁面的文件夾下的目錄? 因為,有什么安全理由對我來說不是很明顯嗎? 或者只是對文件的一般偏見:URL? (即任何真正的應用程序都將托管在網絡服務器上。)

這是互聯網瀏覽器的安全功能。 使用file:/// protocol讀取文件是一個很大的安全問題 這就是為什么不允許這樣做的原因。

如果您仍想在html頁面中閱讀本地文件,可以使用electron.js - 它使用不同的方法。

https://electronjs.org/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM