代码之家  ›  专栏  ›  技术社区  ›  Septih

如何区分.NET WebBrowser组件和实际浏览器?

  •  2
  • Septih  · 技术社区  · 14 年前

    好的,所以我们有一个在线下载商店通过我们的软件访问。最近我们有请求允许通过普通浏览器进行下载,只需打开一个下载页面就相当容易了。问题是,如果用户有两个下载链接,一个用于软件,另一个用于他们的web浏览器,这会让人感到困惑,因此我们希望区分这两个链接,并且只显示相关的下载链接。

    从我收集的信息来看,.net webbrowser组件与ie相同,并且使用相同的用户代理,因此除非我们在软件中对webbrowser进行子类化,使其使用特定的用户代理,否则我们无法使用该组件。这是一个更明智的选择,但我们必须推出另一个更新版本,这是不太理想的。

    有没有其他方法可以判断某人是否正在通过.NET组件访问站点?我唯一的另一个选择是将商店复制到具有不同下载链接的不同地址,并将用户发送到那里。同样,这是可行的,但并不理想。

    3 回复  |  直到 14 年前
        1
  •  1
  •   Sheng Jiang 蒋晟    14 年前

    检查window.external是否为空。IE实现了window.external以拥有addSearchProvider之类的方法,其中大多数时间webbrowser.objectforscripting为空。

        2
  •  0
  •   Tomas Petricek    14 年前

    我不知道是否有更好的方法来做这件事,但这里有一个想法…这个 WebBrowser 控件具有属性 Document 这使您可以访问表示已加载文档的dom对象(在加载页面之后)。此对象具有 InvokeScript method 可以用来在加载的页面中运行一些javascript。

    你可以编写一个简单的javascript函数,比如 hideWebDownload() 这会将视图切换到应用程序在本地运行时使用的视图,并从承载 控件 控制:

    webCtrl.Document.InvokeScript("hideWebDownload");
    

    页面的默认视图将显示web的下载链接,在本地应用程序中调用此函数将视图切换到本地下载链接。

        3
  •  0
  •   Ian Jacobs    14 年前

    让您的软件在url的querystring中传入一个不可见的(对用户)值。

    如果那是真的,那就不重要了。