我正在尝试使用node-webkit制作node.js应用。是否可以在node-webkit窗口中加载chrome扩展,并使其显示在chrome浏览器
中我已经完成this但我只能理解它可以加载NPAPI插件。有没有办法将chrome扩展转换为NPAPI插件?
答案 0 :(得分:7)
现在支持加载Chrome扩展程序,并使用Chromium的“--load-extension”切换。
以前,由于node-webkit基于Chromium的Content Layer,因此没有Extension支持。
答案 1 :(得分:4)
正如Roger Wang在回答中提到的那样,node-webkit目前不支持Chrome扩展程序或Chrome App API。但是,我最初创建了一个Chrome应用程序,当很明显Google更多地关注Chrome操作系统平台而不是Mac OS和Windows时,我们切换到了node-webkit。
为了更轻松地将我们的Chrome应用移植到node-webkit,我创建了一些API存根,这些存根包含了一些node-webkit,Node.js和节点模块API,它们执行的操作与Chrome API。
这是一个stubs out 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应用程序运行,用于演示目的。