window.open设置'_self'同窗口打开链接不生效如何解决
问题原因
代码存在两处导致运行异常的问题:
- 直接通过id值
list获取DOM元素是非标准的全局隐式映射,在部分浏览器、尤其是开启严格安全模式的环境下无法被识别,会直接抛出变量未定义的引用错误,这就是弹窗报错的核心诱因 - 没有对下拉菜单默认选中的
value="none"选项做校验拦截,用户未选择具体站点就点击按钮时,会尝试打开无效地址
修复方案
使用标准DOM API获取下拉选择元素,同时增加空选项拦截逻辑。同窗口跳转优先使用window.location.href实现,相比window.open搭配_self参数的写法兼容性更好,不会被浏览器弹窗拦截规则误判拦截。
修复后可直接运行的完整代码:
<body> <form> <select name="list" id="list" accesskey="target"> <option value='none' selected>Choose a theme</option> <option value="https://google.com">Google</option> <option value="https://www.youtube.com">Youtube</option> <option value="https://www.facebook.com/">Facebook</option> </select> <input type="button" value="Go" onclick="goToNewPage()" /> </form> <script> function goToNewPage(){ const selectDom = document.getElementById('list') const targetAddress = selectDom.value // 拦截默认空选项 if (targetAddress === 'none') { alert('请先选择要跳转的目标站点') return } // 当前窗口完成跳转 window.location.href = targetAddress } </script> </body>
如果坚持使用
window.open写法,只需将跳转行替换为window.open(targetAddress, '_self')即可,只要正确获取到下拉框的选中值,同样会在当前窗口打开目标地址,不会弹出新标签页。
内容的提问来源于stack exchange,提问作者Mohamed Osman
相关产品推荐
相关产品推荐

