JavaScript BOM学习求助:moveTo()无法移动打开的子窗口
问题分析
- 调用对象错误:直接调用
moveTo()时,实际是在父窗口的window对象上执行方法,而非目标子窗口。moveTo()是window对象的方法,必须通过子窗口的引用调用才能操作子窗口。 - 变量与函数名问题:
res未用let/const声明,会污染全局作用域;- 按钮
moveChild绑定的函数名是moveToo,命名和功能描述不符,易造成混淆。
- 窗口参数格式问题:
open方法的第三个参数中,逗号后带空格可能导致部分浏览器解析异常,需规范为无空格格式。
解决方法
修改parent.js代码,通过子窗口引用调用moveTo(),同时规范变量和函数命名:
// 声明子窗口引用,避免全局污染 let childWindow; function openChild() { // 规范窗口特性参数格式 childWindow = open("./child.html", "", "width=200,height=200"); } // 修正函数名,与按钮功能对应 function moveChild() { // 检查子窗口是否存在且未关闭,避免报错 if (childWindow && !childWindow.closed) { childWindow.moveTo(0, 200); } }
同步修改parent.html中按钮的绑定函数,确保与修正后的函数名一致:
<input type="button" value="moveChild" onclick="moveChild()" />
额外注意事项
- 浏览器安全限制:现代浏览器仅允许操作由当前页面通过
window.open()打开、且未被用户手动调整过位置/大小的窗口,否则moveTo()会失效。 - 状态检查:调用方法前检查子窗口状态,可避免因窗口已关闭导致的控制台错误。
内容的提问来源于stack exchange,提问作者Ahmed Adnan
相关产品推荐
相关产品推荐

