2014-03-12 66 views
0

的iframe的內容我有一個具有裏面的iframe文件file:///C:/index.html訪問本地文件

<iframe id="folder_browser" src="file:///C:/Files/"></iframe> 

Files文件夾負載的內容到的iframe,但我不能用JavaScript或jQuery的訪問它們。我能做什麼?

我試過$('#folder_browser').contents().find('body').html();但沒有運氣!

+2

你不能做任何事情,因爲:

不過您可以通過使用HTML輸入類型的文件,在這裏工作的例子得到(與用戶的交互)文件相同的原產地政策。使用網絡服務器。 –

+0

您可以拖動到其他窗格中,使用瀏覽,編寫輸出json文件夾列表的批處理文件以便在主頁面中使用,或使用更高級的部署設置,如HTA,Chrome Packaged Apps ,「node-webkit」(一個詞),WinJS/win8或Adobe AIR。 – dandavis

+0

我只想獲取文件夾中的文件列表! – user1447420

回答

1

原因「相同來源策略」無法在這種情況下獲取iframe的內容,也不能獲得來自域的主頁和來自其他域的iframe文檔的情況。

「相同來源策略」是瀏覽器應用於網頁以防止相互通信的一組限制。這些限制可以防止互聯網網站出現很多安全問題,例如使用像這樣的技巧訪問存儲在本地計算機上的私人數據。

不過也有一些方法(和條件)來繞過這些限制:

  1. window.document.domain變量操縱
  2. 代理
  3. 跨文檔消息

但是,這是可能只有當兩個頁面進入相同的域並且通過修改兩個html頁面的內容(特別是它們的javascript),因此頁面可以授權彼此通信秒。這隻能在父頁面和iframe子頁面都是網頁時才能完成:在這種情況下,地址file:/// C:/ something/不是Web地址,而是本地目錄。

有可能在

Bypass Same Origin Policy 找到關於同源策略 一些有趣的教程,

Same-origin policy for file: URIs

特別是在這最後一個,你可以閱讀「新security.fileuri.strict_origin_policy偏好,其默認值爲true,可以設置爲false,如果用戶不希望在嚴格執行同源策略file:URIs「。

另一個有趣的信息資源是:

Bypassing the Same-Origin-Policy For Local Files During Development

在其中我發現下面的提示,可以幫助:

唯一真正的跨瀏覽器的解決方案來規避這個問題完全是爲一個本地網絡服務器的內容,這樣就可以通過訪問HTTP。

換句話說,您必須在您的計算機上安裝網絡服務器軟件,並將其配置爲像http:///yourlocalwebserverdirectory這樣的地址提供文件。

document.getElementById('loadfile').onchange = function(event) { 
 
    var files = loadfile.files; 
 
    var len = files.length; 
 
    var outpt = document.getElementById('filelist'); 
 
    
 
    for (var i=0; i<len; i++) 
 
    { 
 
     outpt.innerHTML += files[i].name + '<br>'; 
 
    } 
 
}
<input type="file" id="loadfile" name="files[]" multiple = "multiple" title="load one or more files" autofocus="autofocus" /> 
 

 
<div id="filelist"></div>

+0

請在downvote時說明動機,以便我可以糾正這一點。 TNX –