从网站启动Chrome打包的Web应用程序

6
我有一个Chrome打包的Web应用程序(必须如此,因为它需要访问串行端口),我希望在我点击网站上的链接/按钮时可以从我的网站上启动该应用程序并传递一些数据。
如果能检测到用户没有运行Chrome或未安装Web应用程序,并将其引导到正确的位置,那就更好了...
是否有任何示例?这似乎是一个显而易见的想法,但我真的很难找到任何相关资料...

请参阅http://stackoverflow.com/questions/19519277/activate-chrome-app-from-web-page以获取更多方法。 - Xan
2个回答

7
要启动应用程序,您可以使用{{link1:url_handlers}},这是最近推出的新功能(应该适用于Chrome 31)。您可以在URL中传递数据。
您可以使用Chrome网络商店的{{link3:inline install}}功能检查是否已安装应用程序,并在未安装时启动安装。

目前此功能仅在“dev”频道中可用,尚不稳定。 - Joshua Smith
1
现在看起来很稳定。非常容易实现。 - posit labs
很遗憾,如果网页在隐身模式下,url_handlers无法工作。还有其他的想法吗? - Alexey Bleikher

2

我找到了一个更好的解决方案。

@Vincent Scheib的解决方案需要将用户重定向到 /some/url,或者打开一个新窗口(这可能会被阻止作为弹出窗口)。从用户体验的角度来看,这些都不是很好。

我的解决方案是创建应用程序并配置externally_connectable。您必须传递将尝试打开应用程序的网站的url域。例如:

"externally_connectable": {
    "matches": ["*://developer.chrome.com/*"]
} 

然后,在您的打包应用程序中的后台脚本中,您可以执行类似以下的操作:

chrome.runtime.onMessageExternal.addListener(function(message) {
      if(message.launch){ //This parameter will be passed in sendMessage method below
          chrome.app.window.create("main.html");
      }
});

最后,要触发应用程序的打开,您需要使用已打包的应用程序ID发送消息。例如:

chrome.runtime.sendMessage("mdoedhlejmepngilmgoenbhmipoclckb", { launch: true });

有没有想法如何启动未指向 "externally_connectable" 的应用程序?我想要从任何网页(例如从本地网络 192.168.1.1)启动我的后台应用程序。 - Alexey Bleikher
@AlexeyBleikher 我认为根据Vincent Scheib的回答,你可以做到这一点。 - edrian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接