我正在尝试在 Windows 7 上使用 node.js 打开 Google Chrome spawn
。它似乎适用于所有参数,除了设置user-data-dir
. 但是,--user-data-dir
直接从命令行工作,如果我从节点调用 .cmd 文件并通过它传递参数,也可以工作。
Chrome 在后台打开(显示在任务管理器中),但浏览器窗口没有打开,我必须手动终止任务管理器中的进程才能结束它。
我没有收到任何错误或任何关于问题所在的指示。
这是我的节点代码:
var spawn = require('child_process').spawn;
var exe = 'C:\\Program Files\\Google\\Chrome\\application\\chrome.exe';
//this does not work and gives no errors just starts chrome in the background but fails to open browser window
// var args = [
// '--user-data-dir=C:\\Windows\\Temp\\testingdir',
// 'http://www.google.com'
// ];
//actual output from running this through a .cmd file and echoing out the arguments
// --user-data-dir=C:\Windows\Temp\testingdir http://www.google.com
//running the above arguments through a .cmd file from nodejs or manually running them in the cli works
//this works from nodejs, other arguments work too, just not the --user-data-dir argument
// var args = ['http://www.google.com'];
chrome = spawn(exe, args);
chrome.stdout.on('data', function (data) {
console.log('stdout: ' + data);
});
chrome.stderr.on('data', function (data) {
console.log('stderr: ' + data);
});
chrome.on('exit', function (code) {
console.log('child process exited with code ' + code);
// chrome.kill();
});
正如您在注释掉的代码中看到的那样,只要我不尝试更改用户数据目录,它就可以工作。我尝试了不同的临时目录,并在临时目录上设置了对“每个人”的完全访问权限,以防出现权限问题。
更新:我刚刚从 v0.8.1 更新到最新的 v0.8.14,现在当它失败时on('exit', function())
实际返回一个代码。
child process exited with code 20
如何查找此代码以了解其含义?
更新 2我认为退出代码 20 只是一次侥幸,因为我无法再重现它了。尝试测试不同的东西有点麻烦,因为我必须记住每次都在任务管理器中杀死 chrome 进程以确保我得到相同的结果。所以它回到了和以前一样的结果,没有错误但没有 chrome 窗口,并且一些运行的 chrome 进程必须手动终止。
更新 3 我刚刚将此脚本移至 Ubuntu 并更改了 exe 和 args 以反映不同的文件结构,它适用于 Ubuntu。
exe = "/opt/google/chrome/google-chrome"
和
args = [
"http://www.google.com",
"--user-data-dir=/home/lotus/testdir"
];
所以我可以确认这与 Windows 上的 Chrome 相关。