【问题标题】:Application links in a webpage网页中的应用程序链接
【发布时间】:2020-02-23 01:02:26
【问题描述】:

如何创建一个链接以打开某人计算机上的程序?

为了清楚起见:我希望 chrome/firefox 打开以下对话框:“打开 MySpecialLinks 链接:someprogram.exe”,roblox.com 的方式。 例如,这样的事情:

<a program="someprogram.exe" arguments="file394">Load in someprogram</a>

在最终用户的计算机上运行“someprogram.exe”。

【问题讨论】:

    标签: html


    【解决方案1】:

    您不能强制程序运行,但如果您将 .exe 存储在您的网络服务器上,您可以链接到它以将其下载到客户端的计算机上。

    <a href="/link/to/someprogram.exe">Download Program</a>
    

    【讨论】:

    • 有道理。有没有办法制作提示“打开方式”对话的“特殊”链接?我知道这是有可能的,如果您查看 Roblox.com,您有虚拟位置,您可以在浏览器中按下“播放”按钮,它会在您的计算机上打开 roblox 程序。
    • 他们可能会在 Roblox 程序中添加一些代码,以便它检测某些 Web 链接并自动在程序中打开它们。类似于docs.microsoft.com/en-us/windows/uwp/launch-resume/…
    • 这是仅限 Windows 的解决方案吗?我验证了 roblox 应用程序启动也适用于 linux。我试图对他们的代码进行逆向工程,但它当然被混淆了。
    【解决方案2】:

    答案原来是 mime 类型和 url 协议。

    href=myprogram://something 代替href=https://something。现在,我们只需要告诉浏览器打开某个程序的“myprogram”链接。然后程序将解析“某物”。

    将 mime 类型和协议与程序关联的方式取决于操作系统,在另一个问题中得到了回答:

    How do I associate a custom MIME-type to my local application in the major browsers?

    【讨论】:

      【解决方案3】:

      简短回答:不,你不能。

      长答案:你可能会。如果用户正在运行 Internet Explorer 并且启用了 ActiveX,并且您知道安装路径,则可以使用:

      <script type="text/javascript">
          function runProgram()
          {
              var shell = new ActiveXObject("WScript.Shell");                 
              var appITunes = "\"C:\\Program Files\\Path\\executable.exe\" ";
              shell.Run(appITunes);
          }        
      </script>
      

      另一种可能性是使用 Silverlight,如果安装并给予疯狂的访问级别,它也可以在 Firefox 中运行......(又名不应该发生)

      <script>
          dynamic cmd = AutomationFactory.CreateObject("WScript.Shell");
          cmd.Run("calc.exe", 1, true);
      </script>
      

      现在您唯一真正的选择是注册一个自定义协议,然后触发您的程序。这可以按照此处所述完成:https://support.shotgunsoftware.com/hc/en-us/articles/219031308-Launching-applications-using-custom-browser-protocols

      【讨论】:

      • 我可以问一下为什么这被否决了吗?当然,ActiveX 充其量只是一个巨大的安全漏洞,而 Silverlight……嗯……没有人使用它。但是,注册自定义协议是从浏览器启动另一个程序的唯一有效方法。
      猜你喜欢
      • 2018-03-20
      • 1970-01-01
      • 1970-01-01
      • 2016-09-13
      • 2014-12-23
      • 2013-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多