【问题标题】:JavaScript - get content of popup windowJavaScript - 获取弹出窗口的内容
【发布时间】:2014-01-04 20:09:53
【问题描述】:

我正在尝试读取通过window.open 加载的文档的内容:

<!DOCTYPE html>
<html>
    <body>
        <button onclick="openWin()">Open "newWindow" and read its content</button>

        <script>
            var myWindow;

            function openWin() {
                myWindow = window.open("http://www.google.com/", 
                    "myWindow", "width=400, height=400");

                myWindow.opener.document.write(myWindow.document.body.innerHTML);
            }
        </script>
    </body>
</html>

如何在通过window.open 加载文档后读取其内容? 我已经用setTimeout 函数尝试过这个,但它没有用。 这是有效的:

myWindow.opener.document.write("Done!!");

【问题讨论】:

    标签: javascript popup window


    【解决方案1】:

    如果您在新窗口中打开的文档来自不同的域(例如,yoursite.com 打开一个加载 google.com 的新窗口),则无法执行此操作。这是一种称为同源策略的安全限制。更多信息:Same-origin policy (MDN)

    希望这可以为您澄清一点。

    【讨论】:

      【解决方案2】:

      有时尝试一些东西是值得的。

      我的 isp 最近在他们的登录表单中添加了一个时间戳,这阻止了我使用带有预加载名称和密码的本地邮件表单。

      我寻找下载他们的登录页面并将时间戳复制到我的本地表单的方法。除了 JavaScript 之外,几乎任何脚本都可以轻松完成。

      帧失败,因为它们使用设置为“拒绝”的 X-Frame-Option。

      令我惊讶的是,我能够从包含他们表单的弹出窗口将时间戳复制到我的本地表单。这现在效果很好。唯一的轻微缺陷是必须使用固定超时,而不是检测弹出页面是否已完全加载。

      这是伪装的完整解决方案:

      <html>
      <head>
      <base href='https://www.isp.net'>
      <title>isp</title>
      </head>
      <body onload="w=window.open('login'); setTimeout('document.f.time-stamp.value=w.document.forms[0].time-stamp.value; document.f.submit(); w.close()',2000)">
      <form name=f action='login' method=post>
      <input type=hidden name='user-name' value='my-name'>
      <input type=hidden name='password' value='my-password'>
      <input type=hidden name='time-stamp' value=''>
      </form>
      </body>
      </html>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多