【问题标题】:Is it possible to load chrome extension in node-webkit window是否可以在 node-webkit 窗口中加载 chrome 扩展
【发布时间】:2013-06-11 13:50:04
【问题描述】:

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

我已经通过this 但我只能理解它可以加载 NPAPI 插件。有没有办法将chrome扩展转换为NPAPI插件?

【问题讨论】:

  • @MuhammadUmer,如果您仍在寻找解决方案,请查看my answer here
  • @Jagdeep - 2017 年运气好吗?你是怎么解决这个问题的?

标签: node.js google-chrome-extension node-webkit


【解决方案1】:

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

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

【讨论】:

  • 谢谢!!有没有办法将 chrome 扩展转换为 NPAPI 插件?根据 node-webkit 文档,它应该可以加载这种插件。
  • @pc1500 你有什么可以支持上游将其移动到内容层的说法吗?我不是在推断虚假,但我很好奇,所以我可以追随它。
  • 您是否找到了一种方法来做到这一点,是否可以使用 chrome 应用程序而不是扩展程序来完成。我只是想要一种访问 chrome 扩展/应用程序附带的 api 的方法......还有一种方法可以做你所要求的,比如通过插件使用扩展或插件......
  • pc1500 我想我给你发了电子邮件
【解决方案2】:

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

【讨论】:

  • 文档共享、屏幕共享扩展是否适用于您使用最新 node-webkit 的解决方案?
  • @yumyum 我们在 node-webkit 应用程序中进行屏幕共享和文件共享。这是可能的,但我们不使用存根。我们只是使用了现有的 API,放弃了 Chrome 应用。
  • USB 和串口呢?
  • @Pier - 如果有通过 node-webkit 使用 USB 和串行的本地方式,那么您可以将其包装在存根中。目前,我还没有为这些组件编写存根,因此请随意使用其他存根作为示例。希望这会有所帮助!
  • 似乎有一些 C++ Node 模块可以做到这一点,但要在 NWJS 中使用它们需要重新编译。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-09
  • 2012-08-24
  • 1970-01-01
  • 1970-01-01
  • 2017-06-05
  • 2011-12-19
  • 1970-01-01
相关资源
最近更新 更多