`

跨域学习 - window.name

阅读更多
利用window.name实现跨域。

window.name
引用
一个字符串,存放了窗口的名称。这个名称是在open()方法创建窗口时指定的或者使用一个<frame>标记的name属性制定的。窗口的名称可以用作一个<a>或者<form>的target属性的值,以这种方式使用target属性声明了超链接文档或表单提交结果应该显示于指定的窗口或帧中。


window.name跨域主要利用iframe中的中内部更换页面,但是iframe的window.name值不会因为页面改变而改变。

域1的主要页面:
<!DOCTYPE html>
<html>
<head>
  <title>father page</title>
</head>
<body>
  <h1 class="title">Father page, host: <span></span></h1>
  <form action="http://www.valley2.com/pro01-winname/login.php" target="rFrame">
    <div>
      <span>username:<span><input type="text" name="u" />
    </div>
    <div>
      <span>password:<span><input type="text" name="p" />
    </div>
    <div>
      <input type="submit" value="submit" />
    </div>
  </form>
  <!--<iframe id="idFrame" name="rFrame" src=""></iframe>-->
  <div id="idResult"></div>
  <br><br><br>
<script>
//title
var h1Node = document.getElementsByClassName('title')[0];
var spanNode = h1Node.getElementsByTagName('span')[0];
spanNode.innerHTML = location.host;

var frame = document.createElement('iframe');
frame.setAttribute('name', 'rFrame');
document.body.appendChild(frame);
var status = 0;
frame.onload = function() {
    if (status == 1) {
        var window = frame.contentWindow;
        var resultNode = document.getElementById('idResult');
        resultNode.innerHTML = window.name;
    } else if (status == 0) {
        frame.contentWindow.location = 'http://www.valley.com/pro01-winname/proxy.html';
        status = 1;
    }
};

</script>
</body>
</html>


域1的跳转页面:
<div>proxy</div>


域2的数据页面:
<?php
if (isset($_GET['u']) && $_GET['u'] === 'valley'
    && isset($_GET['p']) && $_GET['p'] === 'password') {
    $result = 'login';
} else {
    $result = 'nologin';
}
echo '<script>';
echo "window.name='$result';";
echo '</script>';
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics