2012-12-17 71 views
4

我需要檢查一個iframe src中的父頁面的變化。location.href不改變iframe src

$('myiframe').attr('src'); 

工作正常,但是當我從iframe中通過JavaScript更改URL的哈希

location.href += '#hash'; 

我可以看到它的iframe改變檢查location.href,但是從父文檔,src似乎沒有改變。任何幫助?

編輯

由於包含頁面和iframe在不同的領域,我與src屬性來檢查它,我不能訪問iframe中location.href財產。

+3

如果我沒有記錯,更改URI上的散列並不會實際重新加載頁面。在頁面重新加載之前,'src'屬性在iframe上保持不變。如果你想檢查iframe的URL,試試'$(「#myiframe」)[0] .contentDocument.location.href'。當然,這有兩個要求:1)iframe必須與父代相同的域和端口,2)我假設「myiframe」是您引用的iframe的「id」。 –

+0

這是標準行爲。設置location.href應該只改變當前上下文中窗口對象的'src'屬性,在這種情況下是iFrame文檔。 – Bruno

回答

3

哈希參數不是在物業location.href,嘗試

location.hash = 'hash'; 
0

我懷疑您是否可以從父的JavaScript只是做到這一點。 因爲那麼我可以:

  1. 創建一個頁面,帶有隱藏的iframe。 (說http://mysite.com/fake
  2. 在iframe中,打開一些網站(類似https://accounts.google.com/redirlogin的東西)
  3. 的登錄過程中的一些中間頁如果孩子存在Cookie &的有沒有采取足夠的照顧,內頁該框架將重定向到實際的網站,用戶登錄。
  4. 從父頁面,我可以檢查它所經歷的所有中間URL,它基本上可以包含一些會話ID。

注意:我在orkut天&中做了類似的操作,即用於重定向到orkut的「中間登錄頁面」。這是爲了實現我想實現的自動登錄功能而完成的。但是,我無法在父頁面中獲得任何信息。

注:

  1. 我可能是完全錯誤的,但我覺得從安全的角度來看,這是不可能的,從純父端代碼。孩子應該通知父母。
  2. 它確實可以用於域內網站。
0

跨域框架可以設置,但不能讀取彼此的位置。 (爲什麼?呃,閱讀對方的位置會違反相同的出處政策,可能會泄露網址中顯示的敏感信息。我不確定爲什麼設置它們是允許的。但歷史上,網站使用導航父頁的能力爲framebust ,但這不再那麼相關)

因此,如果您嘗試使用散列片段進行跨域框架通信(並且由於某種原因您不能使用postMessage),那麼執行此操作的方式是使用window.top.location.href來更改其父級位置的哈希片段。然後父頁面應該經常檢查每個哈希片段的變化。

Here是我發現的一個演示。

0

這段代碼適用於YouTube視頻,PDF和html頁面(除非幀故意目標網站封鎖)

該鏈接將顯示文檔「HTP:// someurl」 DIV ID內進入一個匿名的iframe =「someID」

`<a href="htp://someurl" onclick="renderLink('someID');return false;" title="Click to view external document">view external document</a>` 

`function renderLink() {` 
    `if (!e) var e = window.event;` 
    `var pdfsrc = e.srcElement.getAttribute('href');` 
    `var $pdfdiv = document.getElementById('someID');` 
    `var $pdfTarget = $pdfdiv.getElementsByTagName("iframe")[0];` 
    `$pdfTarget.src = pdfsrc;` 
    `}`