子页面 父页面相互修改

window.open window.opener

父页面修改子页面用到window.open

语法

1
2
3
4
5
6
let windowObjectReference = window.open(strUrl, strWindowName, [strWindowFeatures]);

参数介绍
strUrl 要在新打开的窗口中,加载的url
strWindowName 新窗口的名称
这两个是必选的参数,后面一个是可选 不说了

使用

1
2
3
4
<script>
var target_page=window.open("parent-call.html","");
target_page.document.write('我被亲爹重写了');
</script>

子页面修改父页面 window.opener

返回打开当前窗口的那个窗口的引用.

如果当前窗口是由另一个窗口打开的, window.opener保留了那个窗口的引用. 如果当前窗口不是由其他窗口打开的, 则该属性返回 null.

语法

1
var objRef = window.opener;

使用

这里要先判断一下,父页面是否存在

1
2
3
4
5
6
7
8
9
<script>
if(window.opener){
window.opener.document.write("我是坏蛋儿子,我把亲爹重写了");
}
else{
alert('我没有亲爹');
}

</script>

iframe子父页面修改

修改父页面window.parent

语法

1
var parentWindow = window.parent;

使用

1
2
3
<script>
window.parent.document.write("我是坏孩子,我修改了亲爹")
</script>

修改子页面window.frames

返回当前窗口,一个类数组对象,列出了当前窗口的所有直接子窗口

语法

1
frameList = window.frames;

frameList是一个frame对象的集合,它类似一个数组,有length属性且可以使用索引([i])来访问。

使用

1
2
3
<script>
window.frames['change_by_father'].contentWindow.document.write('来自父页面的修改') //change_by_father为frame的ID
</script>

修改子页面的时候,需要注意的一点是iframe的document并不直接属于当前frame,而是属于contentWindow。

demo http://127.0.0.1/test/xss-test/xss-test/

参考链接

https://www.cnblogs.com/kuoaidebb/p/4420202.html