我試圖用spawn
在Windows 7上使用node.js打開Google Chrome。它似乎適用於除設置user-data-dir
之外的所有參數。但是,--user-data-dir
直接從命令行工作,如果我從節點調用.cmd文件,並通過它傳遞參數,也可以工作。node.js,windows 7,spawn chrome,無法設置用戶數據目錄
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();
});
正如你可以在註釋掉的代碼中看到它的工作原理,只要我不試圖改變用戶數據目錄。我嘗試了不同的臨時目錄,並設置了對temp目錄中'everyone'的完全訪問權限,以防萬一它是權限問題。
更新:我剛剛從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"
];
所以我可以證實,這是專門與Chrome在Windows。
萬一有人發現這個通過谷歌,沒有錯誤顯示的原因是因爲代碼(像nodejs.org的例子)缺少'chrome.on('error',function(){console.log(arguments);});'事件監聽器。 –
感謝@ Mike'Pomax'Kamermans我早已放棄。看起來更新版本的節點可能已經解決了這個問題。我剛剛在節點0.10.10上運行了這個代碼,它可以工作。另一個新東西是C:/ some/path works,但是C:\\ some \\ path不再有效。我很高興,因爲我討厭在Windows中輸入反斜槓。無論哪種方式,瞭解錯誤事件偵聽器都很好。 – isimmons