在WP8 WebBrowser控件中显示m.bing.com

时间:2014-01-08 00:33:42

标签: windows-phone-8 windows-phone windows-phone-8-sdk

我在使用bing.com加载Windows Phone 8上的WebBrowser控件时遇到问题。似乎这样做会启动WP8搜索应用程序(与按下手机上的“搜索”按钮相同)。问题是,一旦您单击该搜索应用程序中的结果,它就不会将您带回原始应用程序 - 它会转到IE以显示结果。这对我不起作用,似乎是WebBrowser行为中的一个巨大缺陷(IMO)。

似乎有一些应用程序已成功能够在不启动手机的搜索应用程序的情况下显示bing.com - 例如Image Downloader Free。还有一个,但我不记得它是什么......

经过一番研究,我发现WebBrowser_Navigating事件在转到bing.com时被解雇了3次:首先请求用户输入的URL(www.bing.com),然后重定向到{{3然后它重定向到bing:// home /?mid = 10006。

阻止它转发到Bing搜索应用程序非常简单,只需将其添加到导航事件中:

e.Cancel = (e.Uri.Scheme == "bing");

问题是,它只显示Bing搜索页面占位符,其中显示“Bing搜索”,并且有一个链接显示“返回Bing搜索”,它不执行任何操作(通常会重新启动Bing搜索应用程序)。 / p>

我有一些想法,但我不确定它们有多可行。

  • 在WP8 WebBrowser控件中,是否可以伪造用户代理?
  • 可以删除或添加WebBrowser.Uri.Flags属性中的某个项目以影响Bing.com处理请求的方式吗?
  • 如果这些都不起作用,我只需在我的网络服务器上创建一个虚拟页面,将所有bing.com请求重定向到它,并让它使用卡片编码的用户代理获取m.bing.com首页。我真的想避免不得不做这个选项。从最终用户的角度来看,他们永远不会知道,但我只是添加了一个全新的开销,维护和资源层。

如果您感兴趣,附加的是WebBrowser.Navigating事件中发生的3个请求之间的EventArgs对象的差异:

请求1(bing.com) - >请求2(转发至wp.m.bing.com/?mid=10006) enter image description here

请求2(转发给wp.m.bing.com/?mid=10006) - >请求3(转发给bing:// home /?mid = 10006) enter image description here

tl; dr有没有人知道如何阻止www.bing.com在我的应用程序中使用WebBrowser控件启动搜索应用程序?

谢谢!

2 个答案:

答案 0 :(得分:2)

我不知道是否有更好的方法来解决这个问题,但我找到了解决方案。单击后退按钮时,我还没有完美地工作,所以如果/当我找到更稳固的解决方案时,我会更新我的答案。我仍然认为这是WP8中WebBrowser控件的一个重大缺陷。

以下是代码:

private bool _customHeaderRequest = false;

private void MainBrowser_Navigating(object sender, NavigatingEventArgs e)
{
    string host = e.Uri.Host.ToLowerInvariant().Trim();

    if ((host == "bing.com" || host.EndsWith(".bing.com")) && !_customHeaderRequest)
    {
        e.Cancel = true;

        Dispatcher.BeginInvoke(() =>
            MainBrowser.Navigate(e.Uri, null,
                "User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; NOKIA; Lumia 710)\r\n"));

        _customHeaderRequest = true;
        return;
    }

    _customHeaderRequest = false;
}

private void MainBrowser_Navigated(object sender, NavigationEventArgs e)
{
    _customHeaderRequest = false;
}

答案 1 :(得分:1)

我无权访问我的模拟器,但我在手机上尝试过,并且:

  1. 当您“首选桌面版”并打开m.bing.com时,不会发生重定向。警告:移动版本不是很漂亮。

  2. 尝试在WebBrowser上禁用脚本,这可能会阻止重定向的发生。

  3. 您是否有机会使用Google?