2012-08-27 102 views
2

有一個簡單的HTML頁面,名爲say abc.html。現在abc.html有一個名爲say'click me'的按鈕。這個頁面abc.html也有一個iframe,id爲'myframe'。在html頁面的iframe中顯示警告框

現在我想要的是,當點擊按鈕'點擊我'時,一個警告框應該出現在名爲'myframe'的iframe中。我怎樣才能做到這一點?

我曾嘗試以下..

window.frames[0].contentWindow.alert("this is the iframe"); 

但這似乎並沒有工作。請讓我知道爲什麼這不起作用,什麼可能是一個替代解決方案。

+0

如果IFRAME內容是從另一個URL加載的,則無法通過JavaScript訪問/修改這些內容。 – feeela

+1

好的..但我不想修改/訪問從不同的URL加載到iframe的頁面內容。我只想在iframe的窗口對象中顯示一個警告框。可能嗎? – qre0ct

+0

看到怪胎我的答案......... –

回答

2

ContentWindow從文檔派生,而不是窗口。

你需要做的是將警報添加到iframe頁面的函數中,然後使用document.getElementById('targetFrame').contentWindow.targetFunction();來調用它(以targetFunction爲例)。 This answer可能會給你更多的技術信息。

+0

你說contentWindow是從文件而不是窗口派生的,但根據W3cSchools教程,contentWindow是iframe對象的屬性。其次,iframe加載了一個我無法控制的不同網址。因此我無法修改iframe的內容。 – qre0ct

+0

爲此,只需將包含完整頁面框架的新頁面添加到iframe的位置;並將JavaScript添加到頁面中。 而且你是正確的,但頁面中的元素是從文檔類派生出來的子類,所以我的聲明也是正確的,但是以抽象的方式。 – jett

+0

感謝jett ......但是你介意對你的黑客進行一點點闡述。 – qre0ct

0

這可能對您有所幫助:

function body_load() 
{  
    document.getElementById('loader').src; 
} 
<div id='mydiv'> 
    <input type="button" value="Click Me" onclick="body_load();" /> 
</div> 
<iframe id='loader' onload="body_load(this)" name="Google" scrolling="auto" style="width:95%;height:600px" src="http://www.image.com"></iframe> 

http://jsbin.com/idazul/1/edit

+0

即使這似乎不工作的傢伙。在任何情況下,如果我使用 document.getElementById('loader')。contentWindow.alert(「this is the iframe」),會怎麼樣?正如你所建議的,或者我使用 window.frames [0] .contentWindow.alert(「這是iframe」); 因爲我試過我nmy的嘗試。兩者畢竟都在做同樣的事情。 – qre0ct

+0

當你把這個警報按鈕點擊右.. ..什麼是錯的發生 –

+0

我已編輯我的答案點擊按鈕它給按鈕提示 –

1

如果源來自除父頁不同的領域,你是打擊瀏覽器same origin policy,這意味着你根本無法對該頁面進行任何操作。

對於「替代建議」,它確實取決於您試圖實現的目標以及用戶應該體驗的內容。

+0

好的。這是我真正想要做的。我想實際檢查iframe上的滾動條是否滾動,iframe中的頁面是否加載。要做到這一點,我雖然使用pageXOffset和窗口對象的pageYOffset。現在我想知道iframe返回的窗口對象是否也支持這些屬性。因此,爲了檢查這一點,我試圖簡單地使用警報方法與iframe返回的窗口對象。 – qre0ct

+0

@geek,不知道你明白我的意思......同樣的出身政策意味着你**不能對該頁面做任何事情**。這包括更新和檢測 - 你什麼都不能訪問 – freefaller

+0

好吧,我明白同樣的原產地政策限制。因此,我無法檢測iframe窗口在頁面加載到iframe後是否已滾動? – qre0ct

1

瀏覽器級別alert沒有明顯地綁定到特定的幀。您將始終獲得以瀏覽器窗口爲中心的警報,而不是以調用它的窗口/框架爲中心。

JSFiddle demonstrating this

如果您需要此功能,你將不得不使用自己的模式對話框,或將呈現它們的庫。

+1

(主要挑剔警報)它在Chrome中......警告框的標題欄顯示「xxx處的頁面說:' – freefaller

+0

好點!我顯然不支付*任何注意*來提醒標題。 –

+0

老實說,我認爲它也適用於其他瀏覽器,但它並不在我已經快速測試過的FF12或IE9中。警報就像交通標誌一樣,你看到的越多,你越是忽略! – freefaller