在Javascript中的iFrame中触发滚动事件时出现问题

在Javascript中的iFrame中触发滚动事件时出现问题,javascript,html,jquery,iframe,dom-events,Javascript,Html,Jquery,Iframe,Dom Events,我在这件事上经历了一段艰难的时光,尽管很多人在互联网上似乎也有同样的问题,但没有一个在线解决方案对我有效 我有以下html代码: <iframe id="documentIFrame" src='http://localhost:49551//Documents/System/ef4be80c-a8d8-482e-9792-50c5692aa07f.pdf' width='100%' height='100%' frameborder='0'></ifram

我在这件事上经历了一段艰难的时光,尽管很多人在互联网上似乎也有同样的问题,但没有一个在线解决方案对我有效

我有以下html代码:

<iframe id="documentIFrame" src='http://localhost:49551//Documents/System/ef4be80c-a8d8-482e-9792-50c5692aa07f.pdf' width='100%' height='100%' frameborder='0'></iframe>
这不会显示结果,它甚至不会进入函数

二,

和以前一样,根本没有结果

三,

同样,没有结果

编辑:关于这个的一些额外信息,在本例中,如果在我将函数分配给onscroll事件后,我console.log iframe,并且我在iframe中搜索,onscroll事件将显示为null

编辑2:使用jQuery选择.contentWindow对我来说不起作用,它是未定义的,但如果我使用简单的JS代码:

document.getElementById("documentIFrame").contentWindow;
。。。然后它返回的元素很好

我也尝试过。contents和contentDocument代替contentWindow,结果是一样的;如果我尝试将这些元素console.log记录下来,它们总是未定义的

我尝试在document.ready上设置滚动函数,也尝试在由不同组件触发的onclick事件上调用函数;结果总是一样的

我已经读过一些关于同源策略的内容,但我认为不应该是这样,因为这个文档(iframe的src中的一个)来自localhost,应该作为同源传递,对吗


任何帮助都将不胜感激。

这似乎对我有用:

document
  .querySelector('#documentIFrame')
  .addEventListener('load', e => {
    e.target.contentWindow.addEventListener('scroll', e => {
      console.log('scrollin');
    });
  });

iframe文档是否与宿主文档来自同一来源?主机名、端口和协议必须相同。如果没有,那么您的能力将受到严重限制。@Jacob文档是由用户上传的,但我将其复制到解决方案文件夹本身的临时文件夹中,事实上,如果我运行项目并检查iframe元素,如果我单击src中的链接,文件将被下载,因此我认为它在主机名中,但我可能误解了它的工作原理。当我说文档时,我指的是HTML文档。外部URL和内部URL是否共享同一来源?听起来他们是这样做的,但只是想确保这不是一个不同的端口号之类的愚蠢行为。@Jacob哦,明白了!是的,他们有相同的起源。我只是试了一下。不是为我工作。我尝试了以下方法:document.querySelector'documentIFrame'.addEventListener'load',e=>{e.target.contentWindow.addEventListener'scroll',e=>{console.log'scrollin';};};它到达了即将滚动的日志,但之后什么也没有发生…而且,只有在$document中添加此代码时,才会发生这种情况。就绪。。。函数,如果我将其放在另一个函数中,将不会显示“即将滚动”日志。将要滚动的日志位于何处?我没有在你的代码中看到这一点。哦,你知道,我刚刚注意到你的文档是PDF;我认为你不能观看PDF浏览器的滚动,只能观看另一个HTML文档。基本上,iframe窗口不是滚动的对象,而是PDF查看器滚动的对象。。是的,肯定是这样。我会检查这一个,谢谢!
                var iframe = document.getElementById("documentIFrame").contentWindow;
                console.log(iframe);


                iframe.onscroll = function () {
                    console.log("scrolling...");
                }
document.getElementById("documentIFrame").contentWindow;
document
  .querySelector('#documentIFrame')
  .addEventListener('load', e => {
    e.target.contentWindow.addEventListener('scroll', e => {
      console.log('scrollin');
    });
  });