我添加了一个名为“外部应用程序按钮”的Chrome扩展程序。
它的作用是我们可以将外部应用程序(例如sublime.exe,vscode.exe等)添加到我们的浏览器工具栏,然后单击以打开exe。
因此,使用jquery或javascript可以使按钮单击发生吗?
我的主要目标是使该应用程序使用网页中的jquery或javascript代码运行。
答案 0 :(得分:1)
对于扩展程序和网页而言,如果不安装额外的软件,就不可能独自完成。您在代码中可以在计算机上完成的工作被“沙盒化”,并且仅限于浏览器提供的任何API。
要调用浏览器外部的应用程序,扩展程序需要使用称为Native Host的东西。这就是为什么需要额外安装一些东西才能使该扩展正常工作的原因。
常规网页无法使用本机主机,因此该路由已关闭。
如果我们允许安装扩展程序,我们可以从网页代码中做到这一点吗?
是的,与网页对话的扩展程序(通过内容脚本或externally_connectable
机制)可以允许网站触发扩展程序代码,从而触发本机主机代码,并执行您想要的操作。
您不能使用任意第三方扩展来做到这一点,因此您需要编写自己的扩展。
如果我们允许安装额外的组件,您是否可以在没有扩展的情况下进行操作?
原则上是。一种典型的方法是安装一个帮助程序,该程序在本地端口上打开一个Web服务器,例如localhost:12345
。然后,任何JavaScript上下文都可以尝试连接到它。
实际上,有并发症。
如何从任意连接保护本地服务器?您需要一些预共享的机密,以不允许其他站点或本地计算机上的其他软件滥用此密码。
从HTTPS网站连接到非HTTPS域是一个问题。为localhost
制作一个受浏览器信任的证书也是一个问题(如果被规避,则会带来安全隐患)。这会使额外组件的安装复杂化。
另一个想法:您的额外组件可以将自己注册为协议处理程序。例如,您可以添加launch-app:
协议,并告诉系统需要调用您的助手应用程序。示例:Steam使用这种方法通过浏览器与其客户端进行通信(例如,安装/启动游戏)。
请注意,这是单向通信,但是对于“启动程序”用例来说就足够了。
然后,您只需提供指向该特殊协议的链接即可。同样,这需要在目标系统中安装额外的组件。您不能仅使用浏览器来做到这一点。
因此,总的答案是:它很复杂,并且需要额外的软件安装。