2013-05-05 33 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

相关问题