背景
我想以编程的方式导航到不同浏览器选项卡中的多个网站。理想情况下,当代码被触发时,我希望能够同时加载这些网站。
问题
作为概念的证明,我有以下代码通过命令打开浏览器。
const { exec } = require("child_process");
exec('xdg-open https://www.google.com').on('exit', () => {console.log('child 1 exited')})
exec('xdg-open https://www.github.com').on('exit', () => {console.log('child 2 exited')})当我运行上面的代码时会发生什么:
child 1 exited和child 2 exited。++
我希望这两个选项卡几乎同时打开并开始加载页面,但这并没有发生。
其他意见
我尝试在单独的终端中运行xdg-open https://www.google.com和xdg-open https://www.github.com (大约同时执行这两个选项卡),并且我能够打开两个选项卡,并在大约同一时间开始加载页面(这是我的目标行为)。
但是,上面的代码的行为似乎与运行xdg-open https://www.google.com && xdg-open https://www.github.com类似。
问题
如果exec()生成了一个新的child_process,为什么上面的代码不同时触发多个页面导航?我如何实现这种行为?
发布于 2021-04-14 05:43:10
我建议你使用从国家预防机制开放。从Node.js应用程序中打开多个URL将是一个很好的选择。
const open = require('open');
const main = async () => {
await open('https://www.github.com');
await open('https://google.com');
}
main();此代码将并行打开这些URL,并在选定的默认浏览器中打开。但是,您可以更改open中的配置以将动态配置传递给它。有关更多细节,请查看这里。
您不应该使用child_process打开这样的任务,因为它不需要任何计算。当Node.js主循环在单线程上运行时,当CPU无法处理阻塞请求时,通常会调用这些请求。您可以检查这里以了解何时使用child_process的更多细节。
发布于 2021-04-20 11:22:13
我发现只有当我的默认浏览器设置为Firefox时才会出现此问题。如果我的默认浏览器设置为chrome,两个浏览器选项卡将同时打开,并开始从两个网站(同时)获取数据。
我在这里发布了这个观察,以防有人发现它有用,但我还没有找到一个解决方案来使这个问题与Firefox一起工作。
编辑:
更多观察
当我试图以同样的方式打开更多的网站(例如10个网站)时,firefox将分两批打开(每批之间有一些延迟)。在每一批,多个网站将同时开放。到目前为止,它似乎将始终开放2批。
https://stackoverflow.com/questions/67084351
复制相似问题