1

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

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

经过一番研究,我发现 WebBrowser_Navigating 事件在访问 bing.com 时会触发 3 次:首先请求用户输入的 URL (www.bing.com),然后将其重定向到http://wp。 m.bing.com/?mid=10006,然后重定向到 bing://home/?mid=10006。

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

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

问题是,它只显示 Bing 搜索页面占位符,上面写着“Bing 搜索”,并且有一个链接显示“返回 Bing 搜索”,它什么都不做(它通常会重新启动 Bing 搜索应用程序)。

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

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

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

请求 1 (bing.com) -> 请求 2(转发到 wp.m.bing.com/?mid=10006) 在此处输入图像描述

请求 2(转发到 wp.m.bing.com/?mid=10006)-> 请求 3(转发到 bing://home/?mid=10006) 在此处输入图像描述

tl;dr 有谁知道阻止 www.bing.com 导致搜索应用程序在我的应用程序的 WebBrowser 控件中启动的方法?

谢谢!

4

2 回答 2

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;
}
于 2014-01-08T06:20:39.463 回答
1

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

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

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

  3. 你有机会只使用谷歌吗?

于 2014-01-08T03:14:22.113 回答