2017-10-06 69 views
0

我需要在用戶已經打開的頁面內「加載頁面」,而不是將它們重定向到新頁面。我的理解是,iframe是做這件事的最好方法。我喜歡jQuery的dialog box作爲這個iframe內容的包裝,因爲它看起來不錯,並允許用戶重新定位彈出以及輕鬆關閉它。訪問jQuery對話框中的iframe內部的元素

但是,在訪問此iframe上的元素時遇到問題。我希望能夠從用戶的原始窗口獲取數據並將其添加到新的iframe的輸入元素,但我似乎無法找到執行此操作的語法。

代碼中有一些iframe頁面覆蓋了jQuery使用的$,所以我不能使用$('#foo').text('bar')。我一直試圖找到在純JavaScript正確的語法 - 像

var a = window.frames["e_frame"].document.getElementById ("title"); 
a.text = 'foobar'; 

其中e_frame是我給我的iframe的id和title是元素的ID加載在iframe。我可以在開發者控制檯中清楚地看到這些,但是我無法訪問它們,我不知道我在做什麼錯誤。在控制檯上面的命令輸入給我這個錯誤:

VM364:1 Uncaught TypeError: Cannot read property 'document' of undefined 
    at <anonymous>:1:28 

並鍵入window.frames到控制檯來調試自己給了我太多的線條,因爲我不知道我要找的經歷。

任何想法?

+0

並且是來自同一個域的iframe中的頁面,使用與父頁面相同的協議和端口。 – adeneo

+0

iframe來自不同的子域(a.mydomain.com vs b.mydomain.com) - 我通過Apache ProxyPass加載它 - 在通過代理進行加載之前我得到了CORS錯誤,但由於我把它通過代理我現在可以加載頁面並使用鼠標和鍵盤與其進行交互,但不能直接通過代碼訪問它。 –

+0

我對同一個子域中的不同頁面嘗試了相同的方法,並且我可以通過javascript訪問該頁面的元素。我想這是一個CORS問題。穿過它! –

回答

1

你試過嗎?

var iframe = document.getElementById("e_frame"); 
var iframe_contents = iframe.contentDocument.getElementById('title'); 
+0

''undefined' for var iframe = document.getElementById(「e_frame」);' –

+0

我犯了一個錯誤。對話框> iframe>元素是否正確? –

+0

是的,這是正確的 –