我在使用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>
我有一些想法,但我不确定它们有多可行。
如果您感兴趣,附加的是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控件启动搜索应用程序?
谢谢!
答案 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)
我无权访问我的模拟器,但我在手机上尝试过,并且:
当您“首选桌面版”并打开m.bing.com时,不会发生重定向。警告:移动版本不是很漂亮。
尝试在WebBrowser上禁用脚本,这可能会阻止重定向的发生。
您是否有机会使用Google?