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

Windows phone 8 在WP8 WebBrowser控件中显示m.bing.com,windows-phone-8,windows-phone,windows-phone-8-sdk,Windows Phone 8,Windows Phone,Windows Phone 8 Sdk,我在让bing.com加载Windows Phone 8上的WebBrowser控件时遇到问题。这样做似乎会启动WP8搜索应用程序(与按下手机上的搜索按钮相同)。问题是,一旦你在该搜索应用程序中单击一个结果,它不会将你带回原来的应用程序-它会转到IE以显示结果。这对我不起作用,而且似乎是WebBrowser行为中的一个巨大缺陷(IMO) 似乎确实有一些应用程序能够在不启动手机搜索应用程序的情况下成功显示bing.com,例如免费图像下载。还有一个,但我不记得是什么了 经过一些研究,我发现WebB

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

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

经过一些研究,我发现WebBrowser_导航事件在访问bing.com时被触发了3次:首先请求用户输入的URL(www.bing.com),然后被重定向到,然后重定向到bing://home/?mid=10006.

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

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

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

  • 在WP8 WebBrowser控件中,是否可以伪造用户代理
  • 是否可以删除或添加WebBrowser.Uri.Flags属性中的一项,以影响Bing.com处理请求的方式
  • 如果这些都不起作用,我可以简单地在我的web服务器上创建一个虚拟页面,将所有bing.com请求重定向到它,让它用一个卡片编码的用户代理抓取m.bing.com首页。不过,我真的不想做这个选择。从最终用户的角度来看,他们永远不会知道,但我只是添加了一个全新的开销、维护和资源层
如果您感兴趣,请附上WebBrowser中发生的3个请求之间EventArgs对象的差异。导航事件:

e.Cancel = (e.Uri.Scheme == "bing");
请求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控件中启动吗?


谢谢大家!

我没有访问模拟器的权限,但我在手机上试用过,并且:

  • 当你“更喜欢桌面版”并打开m.bing.com时,重定向不会发生。警告:手机版不是很好看

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

  • 你有可能只用谷歌吗


  • 我不知道是否有更好的方法来处理这个问题,但我找到了解决办法。当点击后退按钮时,我还没有让它完美地工作,因此如果/当我找到更可靠的解决方案时,我将更新我的答案。我仍然认为这是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;
    }
    

    嗨,米格尔,谢谢你的回复。关于你的第一项:没错,它确实会阻止搜索应用在IE中打开,但它似乎不会影响WebBrowser控件。我尝试过启用和禁用脚本(默认情况下它们是禁用的)。它们似乎是基于重定向的用户代理和HTTP 30x响应代码。关于谷歌,我希望我的用户能够去任何地方。该应用程序旨在扫描用户所在的当前URL的HTML。我已经发布了一个解决方案,但它并不完美。再次感谢你。@AdamPlocher嘿,我们有时都得做点什么。希望微软能解决这个问题,我能想象这会有多麻烦。您可以尝试在支持论坛()中发布此消息,并查看他们是否可以将其报告为缺陷。祝你好运:)