Я пытаюсь открыть Google Chrome с помощью node.js в Windows 7, используя 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();
});
Как вы можете видеть в закомментированном коде, он работает до тех пор, пока я не пытаюсь изменить каталог пользовательских данных. Я пробовал разные временные каталоги и устанавливал полный доступ для «всех» во временном каталоге на случай, если это проблема с разрешениями.
Обновление: я только что обновился с версии 0.8.1, кажется, до последней версии 0.8.14, и теперь, когда происходит сбой, on('exit', function())
фактически возвращает код.
child process exited with code 20
Как я могу найти этот код, чтобы узнать, что он означает?
Обновление 2. Код выхода 20, я думаю, был всего лишь разовой случайностью, потому что я больше не могу его воспроизвести. Попытка протестировать разные вещи приводит к ошибкам, потому что я должен каждый раз не забывать убивать процессы Chrome в диспетчере задач, чтобы убедиться, что я получаю одинаковые результаты. Таким образом, он вернулся к тем же результатам, что и раньше, без ошибок, но без хромированного окна и с некоторыми запущенными хромированными процессами, которые нужно останавливать вручную.
Обновление 3 Я только что перенес этот скрипт в Ubuntu и изменил exe и args, чтобы отразить другую файловую структуру, и он работает в Ubuntu.
exe = "/opt/google/chrome/google-chrome"
а также
args = [
"http://www.google.com",
"--user-data-dir=/home/lotus/testdir"
];
Поэтому я могу подтвердить, что это конкретно связано с Chrome в Windows.
chrome.on('error', function () { console.log(arguments); });
. - person Mike 'Pomax' Kamermans   schedule 08.07.2013