【问题标题】:How can I check to see if a child browser window has finished loading?如何检查子浏览器窗口是否已完成加载?
【发布时间】:2009-07-15 16:40:27
【问题描述】:

我在一个弹出新窗口的页面上有一个链接,有时第二个窗口需要很长时间才能加载。 我想禁用父窗口上的链接,直到子窗口完成加载。 我知道我可以让子窗口 onload() 来提醒父母,但我不想惹孩子,所以我有一个小 javascript 来轮询子窗口以查看它是否有任何数据,除了它不起作用。 我不能 newwindow.document.getelementbyid 因为我永远无法确定该页面上是否会有任何特定元素。 我只是想看看里面有没有a。

【问题讨论】:

  • 子窗口中正在加载什么?来自您自己的网络域的内容还是来自外部域的内容?

标签: javascript html


【解决方案1】:

只需为子窗口的加载事件添加一个侦听器即可。这是一个非常基本的示例

<html>
<head>
<script type="text/javascript">

onload = function()
{
  document.getElementById( 'test' ).onclick = function( event )
  {
    event.preventDefault();
    event.returnValue = false;
    var link = event.target || event.src;
    var childWin = window.open( link.href, 'child', 'width=400,height=300' );
    childWin.onload = function()
    {
      alert( 'child window loaded!' );
    }
  }
}

</script>
</head>
<body>

<a href="test2.html" id="test">test</a>

</body>
</html>

注意:我应该告诉你,这只有在你加载到子节点的 URL 与父节点属于同一个域时才有效。浏览器安全模型会阻止您这样做。

【讨论】:

  • 可能不应该这样设置 onload。你正在覆盖那里的任何东西。使用 attachEvent 或 addEventListener,具体取决于您的浏览器。
  • 我同意 - 对于这个简单的示例,我真的不想经历完整的抽象过程 - 或者做我在生产系统中实际上会做的事情,使用一些东西像 jQuery。
  • “知道我可以让子窗口 onload() 来提醒父母,但我不想惹孩子”
  • 我虽然他在谈论放置一个单独的脚本块或包含 子文档的 HTML - 这解决了这个问题。 /耸肩
  • 好吧,在我们之间,他有一些想法。希望他能拿走你的。交易总额
【解决方案2】:

您可以尝试获取 body 标签,并检查它是否有子标签。如果是这样,那么页面要么已加载,要么非常接近。足够接近 IMO。

如果孩子的 URL 不是同一个域,你不能做任何事情。那将是一个 XSS 漏洞。

【讨论】:

    猜你喜欢
    • 2015-04-02
    • 2014-05-15
    • 1970-01-01
    • 1970-01-01
    • 2012-01-07
    • 2012-04-03
    • 1970-01-01
    • 1970-01-01
    • 2019-08-27
    相关资源
    最近更新 更多