0

我了解,为了正常触发 iframe 中的 onscroll 事件处理程序,iframe 必须包含与包含 iframe 的页面具有相同域名的站点。但是,对于包含外部站点的 iframe,无论如何都可以做到这一点?

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>

如果我不能做到这一点,我的整个应用程序将毫无用处。有什么解决方法吗?任何黑客?

4

3 回答 3

2

任意外部网站?不。

合作外部网站?让滚动事件侦听器被站点本身(绑定到它的 body 元素)并使用postMessage传递事件数据。

于 2013-05-05T16:59:40.480 回答
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>

不确定它是否会起作用,但请尝试一下。

于 2013-05-05T19:03:49.017 回答
0

看看 Quentin 的回答或者做一些更hacky的事情,使用代理(http://httpd.apache.org/docs/2.2/mod/mod_proxy.html)从您自己的域提供外部站点,因为跨域策略赢了不要让你这样做。

请注意,代理会增加服务器上的流量。

于 2013-05-05T17:01:37.897 回答