原文链接:无法获取弹出层window对象里的内容
问题的根本原因是异步问题,下面来细细分析:
我打印了 三个内容:
console.log(iframeWindow) //打印弹出层window
console.log(iframeWindow.contentWindow) //打印弹出层window的内容contentWindow
console.log(iframeWindow.contentWindow.layui) // 打印contentWindow里的layui
控制台的输出是:
可以看到第一个 iframeWindow 是存在的, iframeWindow.contentWindow 是空的,而 iframeWindow.contentWindow.layui 是没有定义的。
可当我打开 iframeWindow 却可以看到 iframeWindow.contentWindow 和 iframeWindow.contentWindow.layui 都是存在的。然而真相究竟是?
新机子哇宜自谋西偷子:
虽然 iframeWindow 已经率先打印出来结果,但是它在打印的时候我们的 iframe 页面是还没有渲染完成的,所以 iframeWindow 即使存在,但和它同时打印的 iframeWindow.contentWindow 和 iframeWindow.contentWindow.layui 是没有内容的。
说到这有人就要问了,那为什么我打开控制台打印的 iframeWindow 里面有iframeWindow.contentWindow 和 iframeWindow.contentWindow.layui 的内容呢?
真相是在我们没有点开它的时候,它确实是没有内容的,但我们点击它之后,这小子又去偷摸着加载了一遍,所以我们实际上看到它是有内容的。
那这样的问题要怎么解决呢?
方式一:
延迟函数,setTimeout(function(){},毫秒数),设置延迟加载时间200,300,500,1000...,确保iframe页面加载完成后再读取。缺点是不能确定的毫秒数。
方式二:
试图用 while 循环持续获取,while(iframeWindow.layui.form == undefined && i<1000),加上i<1000是为了防止陷入死循环,但不论循环多少次仍旧获取不到 layui ,此方式仍在研究当中....
如果各位朋友、前辈有不同的解决办法,敬请指出!