如何在window.open打开的新窗口中执行JavaScript命令?
解决方案
首先,你的核心问题是没有保存新窗口的引用,导致后续操作都在当前页面执行,而非目标窗口。另外,chrome://这类浏览器内部链接受同源策略限制,普通网页的JavaScript无法直接操控,这点必须明确。
正确代码示例
<script> function hi() { // 保存新窗口的引用,后续操作都基于这个变量 const targetWindow = window.open("https://link_goes_here.com"); // 等待窗口加载完成后执行操作,避免窗口未初始化就操作 targetWindow.onload = function() { // 1. 刷新新窗口 targetWindow.location.reload(); // 2. 注意:普通网页无法跳转至chrome://链接,以下仅为语法示例 // 只有在浏览器扩展、本地file://页面等特殊环境下才可能生效 targetWindow.location.href = "chrome://settings"; }; // 如果需要打开另一个chrome://链接,同样受环境限制 // const anotherChromeWin = window.open("chrome://extensions"); } </script> <button onclick="hi()">Click Me!</button>
关键要点说明
- 保存窗口引用:
window.open()会返回新窗口的对象实例,必须把它赋值给变量(比如targetWindow),后续所有针对新窗口的操作都要通过这个变量调用。 - 等待窗口加载:使用
onload事件确保新窗口完全加载后再执行操作,避免因窗口未初始化导致的错误。 - chrome://链接限制:浏览器的安全策略禁止普通HTTP/HTTPS网页的JavaScript跳转或打开
chrome://链接——这类操作仅在浏览器扩展程序、本地file://协议页面或Chrome开发者工具的特殊环境下才能生效。如果你的原代码是在这些环境中运行的,才能实现chrome://链接的跳转;如果是普通网页,这部分逻辑无法实现。
补充说明
如果你的原代码是Chrome扩展,需要在manifest.json中声明对应的权限(比如"chrome://settings/*"相关权限),并且扩展的内容脚本或后台脚本才能操控这类内部页面。
内容的提问来源于stack exchange,提问作者George
相关产品推荐
相关产品推荐

