我可以从代码中启动 Chrome 扩展 API 吗?

Can I fire up a Chrome extension API from code?

是否可以在网站内启动 Google Chrome 扩展程序?例如 运行 一些 javascript 将启动扩展 UI?

我正在构建一个网络应用程序,允许用户截取他们的桌面屏幕截图并进行编辑。我有一个示例扩展,运行ning 使用 dektopCapture,但它是扩展的 'app' 样式。


我的问题是:

是否可以从我的网络应用程序中启动 desktopCapture UI(window 获取可用的 windows 以进行流式传输),也许是一个按钮,获取流并将其放置在我的网络应用程序中的 canvas/HTML5 视频元素上?

我想我可以在扩展中连接一个事件侦听器并使用 runtime.onMessage 到 post 来自我的应用程序

的消息

备注:

如果有更直观的方法来做到这一点,我可以走那条路 - 例如,如果我可以在 网络应用程序 中保持尽可能多的交互 只有扩展名 运行宁在后台,那就更好了。

扩展是 browser_action 类型,但我希望它适用于单个页面(应用程序的网页),所以如果它可以在 page_action 中使用,我更愿意这样做.如果我可以从网页中触发它,那么真的不需要 browser_action 图标

我还计划构建一个 FF 扩展,因此也欢迎任何见解。

所以我在回答我自己的问题。

我已经设法使用 externally_connectables 使其正常工作。

The externally_connectable manifest property declares which extensions, apps, and web pages can connect to your extension via runtime.connect and runtime.sendMessage.

1。在 manifest.json

中声明 app/webpage

只需在 manifest.json 中将 web-app/page 声明为 externally_connectable

例如,我想连接我的应用托管在 Github 页面上,我的域名是 https://nicholaswmin.github.io,所以它有点像这个:

"externally_connectable": {
  "matches": ["https://nicholaswmin.github.io/*"]
}, //rest of manifest.json

2。为 background.js

中的消息设置事件侦听器

然后在您的 background.js 中设置事件侦听器,如下所示:

chrome.runtime.onMessageExternal.addListener(function(request, sender, sendResponse) {
 //Stuff you want to run goes here, even desktopCapture calls
});

3。从您的 web/app 页面

发送消息

然后从您的 web-app/website 中这样调用它:

chrome.runtime.sendMessage("APP ID GOES HERE", 
                       {data: { key : "capture"}});

确保您的网站在 manifest.json 中正确声明为 externally_connectable 并且您在发送消息时传递了应用程序 ID