正如 Roger Wang 在他的回答中提到的,node-webkit 目前不支持 Chrome 扩展程序或 Chrome 应用程序 API。但是,我最初创建了一个 Chrome 应用程序,当很明显 Google 更关注 Chrome OS 平台而不是 Mac OS 和 Windows 时,我们切换到了 node-webkit。
为了更容易将我们的 Chrome 应用程序移植到 node-webkit,我创建了一些 API 存根,它们围绕一些 node-webkit、Node.js 和 node 模块 API 执行一些与Chrome API。
chrome.alarms.* API 的示例存根:
这是一个存根 chrome.alarms.* 的示例,这样它至少不会抛出错误并静默失败:
window.chrome = {
alarms: {
clear: function(name) {
console.warn("not implemented.");
},
clearAll: function() {
console.warn("not implemented.");
},
create: function(name, obj) {
console.warn("not implemented.");
},
onAlarm: {
addListener: function(callback) {
console.warn("not implemented.");
return;
var alarm = {
name: ""
};
callback();
}
}
}
清单和后台页面访问的示例存根:
这是一个使用 chrome.runtime.getManifest 获取 package.json 清单的示例,以及通过 chrome.runtime.getBackgroundPage 访问 node-webkit 中的背景页面,假设背景页面打开了窗口及其父级是背景页面:
chrome.runtime: {
getManifest: function() {
return typeof(require) !== "undefined" ? require("../package.json") : {};
},
getBackgroundPage: function(callback) {
var backgroundPage = {
postMessage: function(message, origin) {
if(window.opener != null)
window.opener.postMessage(message, origin);
else
window.postMessage(message, origin);
}
};
callback(backgroundPage);
},
使用此解决方案,我们或多或少只是将 package.json 文件添加到应用程序,添加到 API 存根中,并在第 1 天运行应用程序。
(免责声明:这是我对 node-webkit 的开源贡献)
您可以找到"node-webkit-chrome-api-stubs" in my GitHub repository。
出于演示目的,GitHub 存储库中的代码实际上既可以作为 Chrome 应用程序也可以作为 node-webkit 应用程序运行。