6

我正在尝试使用 node-webkit制作一个 node.js 应用程序。是否可以在 node-webkit 窗口中加载 chrome 扩展并使其显示为在 chrome 浏览器中显示

我已经完成了这个,但我只能理解它可以加载 NPAPI 插件。有没有办法将 chrome 扩展转换为 NPAPI 插件?

4

2 回答 2

6

现在通过 Chromium 的“--load-extension”开关支持加载 Chrome 扩展程序。

以前,由于 node-webkit 基于 Chromium 的内容层,没有扩展支持。

于 2013-06-14T22:53:37.007 回答
3

正如 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.* 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 应用程序运行。

于 2014-06-18T01:01:42.160 回答