我在 Windows Phone 8 上的 WebBrowser 控件中加载 bing.com 时遇到问题。这样做似乎会启动 WP8 搜索应用程序(与按手机上的搜索按钮相同)。问题是,一旦您单击该搜索应用程序中的结果,它不会带您返回原始应用程序 - 它会转到 IE 显示结果。这对我来说不起作用,并且似乎是网络浏览器行为中的一个巨大缺陷(IMO)。
似乎确实有一些应用程序已经成功地能够在不启动手机搜索应用程序的情况下显示 bing.com - 例如 Image Downloader Free。还有一个,不过我不记得是什么了……
经过一番研究,我发现访问 bing.com 时 WebBrowser_Navigating 事件会被触发 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 处理请求的方式?
- 如果这些都不起作用,我可以简单地在我的网络服务器上创建一个虚拟页面,将所有 bing.com 请求重定向到它,并让它使用卡编码的用户代理抓取 m.bing.com 首页。不过,我真的很想避免这样做。从最终用户的角度来看,他们永远不会知道,但我只是添加了一个全新的开销、维护和资源层面。
如果您感兴趣,请附上 WebBrowser.Navigating 事件中发生的 3 个请求之间的 EventArgs 对象的差异:
Request 1 (bing.com) -> Request 2 (forwarded to wp.m.bing.com/?mid=10006)
Request 2 (forwarded to wp.m.bing.com/?mid=10006) -> Request 3 (forwarded to bing://home/?mid=10006)
tl;dr 有谁知道如何阻止 www.bing.com 导致搜索应用程序在我的应用程序的 WebBrowser 控件中启动?
谢谢你!