2013-05-05 79 views
0

我知道,爲了正常觸發iframe中的onscroll事件處理程序,iframe必須包含與包含iframe的頁面具有相同域名的站點。但無論如何,這可以爲包含外部網站的iframe完成嗎?包含外部wesbite的iframe不會觸發onscroll事件處理程序

的onscroll事件處理程序:

<script type="text/javascript"> 
    window.onload = function() { 
     var frm = document.getElementById("test").contentWindow; 
     frm.onscroll = function(){ 
      alert("iframe scrolled"); 
     } 
    } 
</script> 

上面的js代碼工作得很好,這種:

<iframe id="test" src="http://www.<myDomain>.com"></iframe> 

,但不是這個:

<iframe id="test" src="http://www.<anExternalSite>.com"></iframe> 

如果我不能做到這一點我的整個應用程序將是無用的。有沒有解決這個問題的方法?任何黑客?

+0

我希望不是,這個xss是非常強大的,因爲它已經是:P – Cthulhu 2013-05-05 16:43:49

回答

2

任意的外部網站?

合作外部網站?讓滾動事件偵聽器由站點本身(與其主體元素)綁定並使用postMessage來傳遞事件數據。

+0

不錯,感謝這個Quentin – coma 2013-05-05 17:00:30

+0

這可能是解決這個問題的方法。但不是在我的情況下,因爲我不能與外部網站合作。我已經問過關於這個問題的另一個問題:[Rails:將外部網頁作爲我自己的域名 - 在iframe中使用的URL](http://stackoverflow.com/questions/16415936/rails-serve-an-external -webpage-as-my-own-domain-url-to-be-used-in-iframe) – soso 2013-05-07 09:48:19

0

看看昆汀的回答或做些更加冒險的事情,使用代理(http://httpd.apache.org/docs/2.2/mod/mod_proxy.html)從您自己的域名服務外部網站,因爲跨域策略不會讓您這樣做。

請注意,代理服務器會增加服務器上的流量。

+0

這是什麼stumbleupon.com呢? – soso 2013-05-05 18:00:01

+0

哼哼......讓我檢查一下...... – coma 2013-05-05 19:15:22

+0

對不起,我是stumbleupon.com新手,我在哪裏可以看到這個? – coma 2013-05-05 19:18:06

0

使用此:

如果
<html> 
    <head> 
     <style> 
     #iframeoverlay { position: absolute; width: same-as-iframe; height: sams-as-iframe; anything-else: sams-as-iframe; z-index: 1-or-higher-if-the-iframe-is-over-1; } 
     </style> 
     <script> 
     function alert() { 
      alert("iframe scrolled"); 
     } 
     </script> 
    </head> 
    <body> 
     <iframe ... ></iframe><div id="iframeoverlay" onscroll="alert"></div> 
    </body> 
    </html> 

不知道它會工作,但嘗試。

+0

位於iframe頂部的#iframeoverlay不會讓iframe滾動。我也不能設置包含外部網站的iframe的scrollTop值。 – soso 2013-05-06 08:11:32

相關問題