JavaScript - 获取弹出窗口的内容

时间:2014-01-04 20:09:54

标签: javascript popup window

我正在尝试阅读通过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!!");

2 个答案:

答案 0 :(得分:2)

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

希望这能为你澄清一些事情。

答案 1 :(得分:0)

尝试一些事情有时会付出代价。

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

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

框架失败,因为他们使用X-Frame-Option设置为&#39; Deny&#39;。

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

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

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