【问题标题】:How to make WebKit or IE call your application (.NET) from HTML page opened in browser?如何让 WebKit 或 IE 从浏览器中打开的 HTML 页面调用您的应用程序 (.NET)?
【发布时间】:2011-01-26 15:37:15
【问题描述】:

我有一个在 Windows 上运行的 .NET 应用程序。我想单击一些页面元素(按钮链接 Flash 应用程序等)以使用一些特殊参数启动我的应用程序。 (它不仅应该在 IE 中运行,还应该在基于 WebKit 的 Windows 浏览器中运行)在应用安装期间,我们假设用户是管理员并且正在运行 Vista 或 Windows 7 或更高版本。

所以我的问题是 - 在哪里可以获得这种互动的例子(当然有来源)?

那么如何让基于 WebKit 的浏览器或 IE 调用你的 .Net 应用程序呢?

【问题讨论】:

    标签: .net internet-explorer webkit


    【解决方案1】:

    鉴于要运行的应用程序和浏览器都在 Windows 上运行,registered protocol handler 是最好的方法,假设所有有趣的浏览器都支持它。考虑到上面的链接来自 Internet Explorer Development 上的 MSDN 文档,我可以想象一些浏览器可能不想支持这种机制。

    【讨论】:

    • 那么 Steam 或 iTunes 如何从 URL 加载?
    • @Alastair:根据stackoverflow.com/questions/2429770/…,他们注册了一个协议处理程序。我只是建议注册为文件扩展名的启动应用程序,我相信它会更轻量级。
    • 但不太直观。用户仍然必须运行该文件才能启动您的程序。
    • @Alastair:我同意。如果所有有趣的浏览器都支持以这种方式定义的协议处理程序,并且不考虑非 Windows 浏览器,那么协议处理程序技术是迄今为止最好的。
    • @John:缺乏对它的跨平台支持确实令人沮丧。
    【解决方案2】:

    我建议这样做的唯一方法是往返服务器。网页在服务器上触发了一些东西。该应用程序还连接到服务器。我认为以任何其他方式这样做可能是不合理的。如果你想变得很脏,可以使用 Flash 的 LocalConnection(它使用内存映射文件进行通信)与 .net 应用程序聊天。 Darron Schall 已管理(但未共享)。

    如果它需要一个应用程序,为什么还要麻烦一个网页?

    【讨论】:

      【解决方案3】:

      您不能使用基于 Webkit 的浏览器直接打开应用程序。您最大的希望(以及 Apple 打开 iTunes Store 所做的事情)是让您的 .NET 应用程序注册以打开某些类型的 URL,使用指向此类 URL 的链接。

      例如,如果您的应用程序可以打开 myapp:// URL,您可以使用以下 HTTP 标头:

      Location: myapp://mysettings
      

      或更传统的链接:

      <a href="myapp://mysettings">Foo</a>
      

      然后浏览器会小心地打开一个可以处理myapp:// URL 方案的应用程序(在本例中是您的应用程序)。

      【讨论】:

        【解决方案4】:

        您可以注册一个指向您的应用程序的协议处理程序,然后使用该协议和您需要的任何参数创建一个指向 URL 的链接。

        【讨论】:

        • 它应该适用于任何符合要求的网络浏览器。我知道它至少适用于 IE、Firefox 和 Chrome。
        • @Max:但这只能在 Windows 上工作,对吧?而且,“符合”什么?注册协议处理程序的能力是特定于 Windows 的,不是吗?是否所有浏览器都通过注册的协议处理程序支持任意 URL 方案?
        • @John Saunders:就像mailto: 链接打开您的电子邮件客户端一样,任何其他协议都应该在任何浏览器下打开相应的程序。向某些应用程序注册协议需要特定于平台的代码,但这种可能性存在于每个体面的操作系统上。
        • @zneak:但是“mailto”是一个定义良好的协议方案,并且已经存在了很长时间。这自然适用于任何浏览器。特别是,它适用于包含它处理的协议方案硬编码列表的浏览器。这样的浏览器不会处理新注册的方案。
        • @John Saunders:公平地说,这个问题明确涉及 Windows,所有流行的 Windows 浏览器都遵循 Windows API 定义的标准协议处理方法。但是,快速的 Google 搜索似乎表明 UNIX 也为此提供了一些机制。
        【解决方案5】:

        Register a custom URL Protocol Handler。然后您可以使用链接等指定网址:

        <a href="myapp://doSomething/>Click to run my app!</a>
        


        我可以确认这适用于所有版本的 Internet Explorer。我还在最新版本的 Firefox (3.6) 和 Chrome 中对其进行了测试(其版本让我无法理解)。 Chrome 不允许您在地址栏中输入自定义协议,但它会使用自定义协议从链接启动应用程序。

        如果您安装了 Adob​​e Reader,则会注册 acrobat:// 协议。不幸的是,SO 不允许使用自定义协议的链接,所以恐怕我无法在此处添加示例。

        【讨论】:

        • @AndyE:顺便说一句,具有讽刺意味的是,上面的链接在 FF 3.5 中不显示!它适用于 IE 8。
        • @John Saunders:这很奇怪。我记得一篇文章详细介绍了一个(现已修复)基于 Safari(WebKit)如何处理自定义 url 协议的安全漏洞,但我现在似乎找不到它。
        • @John Saunders:还有一点需要注意的是苹果创建的itunes://协议,mIRC和其他应用程序使用的irc://协议。自定义协议已经存在多年,浏览器支持它们是有道理的。
        • @AndyE:“支持他们”,是的。 “使用注册的协议处理程序支持它们”可能是另一回事。您可能还记得有关 Netscape 使用 Microsoft 的拨号界面的一些重大争议。他们也不太热衷于重用 MSHTML。这导致了一些法庭案件......
        • @John Saunders:我不认为这与拨号界面情况相同。注册表中的信息通常可供任何应用程序以他们喜欢的任何方式读取和使用,这就像说应用程序开发人员不想使用 COM(就像自定义 url 协议处理程序一样,也是指向应用程序/DLL)。我决定最好的办法是在我的注册表中寻找自定义协议 - 找到 acrobat:// 并在 IE、Chrome 和 Firefox 中进行了测试。请参阅我的更新答案。
        猜你喜欢
        • 2013-10-10
        • 1970-01-01
        • 2011-03-20
        • 2015-01-08
        • 1970-01-01
        • 1970-01-01
        • 2014-05-29
        • 1970-01-01
        • 2012-04-21
        相关资源
        最近更新 更多