2014-09-26 134 views
5

我使用iframe將faroo.com作爲默認src加載到框架中,當我搜索並使用faroo移動到其他網頁時,但仍然在iframe src中顯示faroo.com我想捕捉在iframe中加載頁面的URL如何從iframe獲取當前頁面加載的url

<!DOCTYPE html> 
<html> 
<head> 
    <script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.11.1.min.js"></script> 
    <script type="text/javascript"> 
    $(function(){ 
     $('#frameid').load(function(){ 
      var z=$('#frameid').attr('src'); 
      console.log('hi '+z); 
     }); 

     $('#clicked').on('click', function(){ 
      $('#frameid').attr('src', 'http://www.faroo.com/');  
     }); 
    }); 

</script> 

</head> 
<body> 

<iframe width="100%" height="500px" id="frameid" src="" name="iframe_a" ></iframe> 

<p><input type="button" value="click me!" id="clicked"></p> 

</body> 
</html> 

在執行console.log的O/p總是faroo.com不是當前網站已加載

+0

如果你正在尋找的「父母」頁面的iframe的網址,看到http://stackoverflow.com/q/3420004/32453 – rogerdpack 2016-11-08 20:48:45

回答

13

出於安全性的問題,你是隻要iframe的內容和引用javascript位於同一個域中,就允許檢索URL。

它應該是這樣,你可以這樣做:

document.getElementById("frameid").contentWindow.location.href 

如果這兩個域是不同的,那麼你就擁有所有適用於cross-site reference scripting域的限制。例如:

document.getElementById("frameid").src = 'http://www.google.com/'; 
alert(document.getElementById("frameid").documentWindow.location.href); 

Error: Permission denied to get property Location.href 

可以肯定的(除非你發現在你的瀏覽器中一些巨大的安全漏洞),你根本無法實現您需要的父文檔中使用javascript什麼。我們來看一個簡單的例子爲什麼。如果瀏覽器允許你需要什麼,你可以很容易:

  1. 創建一個頁面,用隱藏的iframe(如http://malicous.com/dont-trust
  2. 在該iframe,打開一個子頁面與一些網站的登錄過程(如http://insecure-web-site.com/redirectlogin
  3. 如果孩子的cookies存在,並且在某些情況下,框架內的頁面將重定向到真實網站,繼續用戶登錄。
  4. 現在,您可以從父頁面讀取URL中包含的所有登錄過程中的敏感信息,例如,訪問令牌,會話ID,...
  5. 此時受害人網站及其用戶是在很寬的一套新的可能的安全威脅面前...
+0

以及可能的document.getElementById(「myframe」) .contentWindow.document.location.href可以工作 – Teo 2014-09-26 08:28:46

+0

是否還有其他方法可以這樣做。我試圖創建一個虛擬瀏覽器,它可以記錄它作爲歷史訪問的網頁的URL。 – user4082518 2014-09-26 09:19:22

+0

我不認爲你可以用JS做到這一點。查看更新的答案。 – 2014-09-26 13:35:26

1

似乎喜歡有一個黑客,使這項工作,我實際上不能相信它甚至是被允許的。這是怎麼回事似乎工作:

1)更改域匹配的iframe:

document.domain = <iframe_domain> 

2)獲取URL像這樣:

console.log($('iframe')[0].contentWindow.location.href) 

在我看來,這不應該已經工作,但它確實。

主:我在Safari,Chrome和Firefox的所有最新版本以下爲2017年2月1日測試http://subdomain.website.com 的iframe:http://www.website.com

你覺得呢?這是永久性允許的還是它將會很快被修補的疏忽?

更新

我開始在這裏討論瀏覽器安全性的另一個線程。

Isn't This A Serious Browser Security Issue? RE: Cross-Domain iframe Hack

更新2

看起來這將永遠是具體的案例來支持。

https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin_policy