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