我在让 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 控件中启动的方法?
谢谢!