【问题标题】:How can I differentiate between the .net WebBrowser component and an actual browser?如何区分 .net WebBrowser 组件和实际浏览器?
【发布时间】:2010-03-31 12:24:56
【问题描述】:

好的,所以我们有一个通过我们的软件访问的在线下载商店。最近我们收到了允许通过普通浏览器下载的请求,只需打开一个下载页面就可以了。问题在于,拥有两个下载链接(一个用于软件,一个用于网络浏览器)的人会感到困惑,因此我们想要区分这两者并仅显示相关的下载链接。

据我所知,.net WebBrowser 组件与 IE 相同,并且使用相同的用户代理,因此我们不能使用它,除非我们将软件中的 WebBrowser 子类化以使其使用特定的用户代理.这是更明智的选择,但我们必须推出另一个不太理想的更新版本。

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

【问题讨论】:

    标签: c# .net webbrowser-control


    【解决方案1】:

    检查 window.external 是否为空。 IE 实现 window.external 以拥有像 AddSearchProvider 这样的方法,其中大部分时间 WebBrowser.ObjectForScripting 为空。

    【讨论】:

    • 这很好用,即使在微软提供的 IE6 虚拟硬盘上也是如此。
    【解决方案2】:

    我不确定是否有更好的方法来做到这一点,但这里有一个想法...WebBrowser 控件有一个属性Document,它使您可以访问表示已加载文档的 DOM 对象(页面加载后)。这个对象有InvokeScript method,您可以使用它在加载的页面中运行一些JavaScript。

    您可以编写一个简单的 JavaScript 函数,例如 hideWebDownload(),它将视图切换到应用程序在本地运行时使用的视图,并从承载 WebBrowser 控件的 WinForms 应用程序调用它:

    webCtrl.Document.InvokeScript("hideWebDownload");
    

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

    【讨论】:

      【解决方案3】:

      让您的软件在 URL 的查询字符串中传递一个不可见的(对用户而言)值。

      如果有的话,看看就很简单。

      【讨论】:

        猜你喜欢
        • 2015-06-07
        • 1970-01-01
        • 1970-01-01
        • 2015-12-05
        • 2018-09-26
        • 1970-01-01
        • 2013-11-01
        • 2010-11-12
        • 1970-01-01
        相关资源
        最近更新 更多