我正在尝试使用 node-webkit制作一个 node.js 应用程序。是否可以在 node-webkit 窗口中加载 chrome 扩展并使其显示为在 chrome 浏览器中显示
我已经完成了这个,但我只能理解它可以加载 NPAPI 插件。有没有办法将 chrome 扩展转换为 NPAPI 插件?
我正在尝试使用 node-webkit制作一个 node.js 应用程序。是否可以在 node-webkit 窗口中加载 chrome 扩展并使其显示为在 chrome 浏览器中显示
我已经完成了这个,但我只能理解它可以加载 NPAPI 插件。有没有办法将 chrome 扩展转换为 NPAPI 插件?
现在通过 Chromium 的“--load-extension”开关支持加载 Chrome 扩展程序。
以前,由于 node-webkit 基于 Chromium 的内容层,没有扩展支持。
正如 Roger Wang 在他的回答中提到的那样,node-webkit 目前不支持 Chrome 扩展程序或 Chrome 应用程序 API。但是,我最初创建了一个 Chrome 应用程序,当很明显 Google 更关注 Chrome OS 平台而不是 Mac OS 和 Windows 时,我们切换到了 node-webkit。
为了更容易地将我们的 Chrome 应用程序移植到 node-webkit,我创建了一些 API 存根,这些存根围绕着一些 node-webkit、Node.js 和节点模块 API,它们执行一些与 Chrome 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 存根中,并在第一天运行应用程序。
(免责声明:这是我对 node-webkit 的开源贡献)
您可以在我的 GitHub 存储库中找到“node-webkit-chrome-api-stubs”。
出于演示目的,GitHub 存储库中的代码实际上既可以作为 Chrome 应用程序也可以作为 node-webkit 应用程序运行。