Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 包含外部wesbite的iframe不会触发onscroll事件处理程序_Javascript_Jquery_Html_Iframe_Scroll - Fatal编程技术网

Javascript 包含外部wesbite的iframe不会触发onscroll事件处理程序

Javascript 包含外部wesbite的iframe不会触发onscroll事件处理程序,javascript,jquery,html,iframe,scroll,Javascript,Jquery,Html,Iframe,Scroll,我理解,为了在iframe中正常启动onscroll事件处理程序,iframe必须包含与包含iframe的页面具有相同域名的站点。但是,对于包含外部站点的iframe,是否可以这样做呢 onscroll事件处理程序: <script type="text/javascript"> window.onload = function() { var frm = document.getElementById("test").contentWindow;

我理解,为了在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>

window.onload=函数(){
var frm=document.getElementById(“测试”).contentWindow;
frm.onscroll=函数(){
警报(“iframe滚动”);
}
}
上面的js代码适用于此:

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

但不是为了这个:

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


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

任意外部站点?没有


对外合作网站?让滚动事件监听器由站点本身绑定(到其主体元素),并使用来传递事件数据。

看看Quentin的答案,或者做一些更粗糙的事情,使用代理()从您自己的域为外部站点提供服务,因为跨域策略不允许您这样做

请注意,代理将增加服务器上的通信量。

请使用以下方法:

  <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>

#iframeoverlay{位置:绝对;宽度:与iframe相同;高度:sams作为iframe;任何其他:sams作为iframe;z索引:1或更高-if-the-iframe-is-over-1;}
函数警报(){
警报(“iframe滚动”);
}

不确定它是否有效,但试试看。

我希望不会,xss已经很强大了:Pis stumbleupon.com就是这么做的吗?对不起,我是stumbleupon.com的新手,在哪里可以看到这个?[链接](gttp://stumbleupon.com). 这是一个stumbleupon URL的示例:不,他们正在从外部域加载该站点,但是,我在scroll上没有看到任何事情发生。。。您是否希望像他们一样调整iframe的高度?没有必要听iframe的内部滚动事件。对不起,我的错。查看stumbleupon页面的url,我希望stumbleupon也能像自己的网站一样为外部网站服务。但是看了一下代码,发现他们只是使用了一个iframe,外部站点url作为源。有没有一个使用代理的例子,你可以指给我看?你认为对于一个拥有众多(可能数百万)并发用户的应用程序来说,这仍然是正确的方法吗?iframeoverlay位于iframe之上,不会让iframe滚动。我也不能设置包含外部站点的iframe的scrollTop值。这可能就是解决这个问题的方法。但我的情况并非如此,因为我无法与外部网站合作。关于这件事,我又问了另一个问题。