在我的Windows Phone 8应用程序中,我有一个WebBrowser控件,我希望能够重新路由所有http流量,这意味着我拦截了http GET并从我的应用程序提供数据。不仅是html,还包括所有流量(图像等)。我曾尝试使用WebRequest.RegisterPrefix来注册我自己的IWebRequestCreate,以便提供我自己的WebRequests。但是,似乎IWebRequestCreate I寄存器仅用于我在我自己的代码中实例化的WebClient,而不是WebBrowser控件。
我找到了这个帖子:
How to register own protocol using the WebBrowser control?
但似乎这种方法是不可能的。至少在Windows Phone 7中没有。我希望WP8能有更好的运气。或者也许完全不同的方法可行?
有人可以帮帮我吗?
编辑:正如以下Josh Mackey所建议的那样。我或许可以通过代理运行一切。不幸的是,我不确定如何在Windows Phone上的代码中设置代理以在webBrowser控件上使用。似乎WP上没有WebRequest.DefaultWebProxy和wininet.dll。有谁知道如何实现这一目标?答案 0 :(得分:0)
正如您引用的链接所说:“WebBrowser控件将使用Windows Phone Internet Explorer浏览器的HTTP堆栈”,因此您无法拦截它。但是,代理方法可能有用吗?
使用套接字创建一个简单的Web服务器,您可以告诉WebBrowser控件访问它?
我从这里得到了这个想法:Windows phone WebBrowser.Navigating event form data
答案 1 :(得分:0)
使用WebBrowser的Navigating事件(可以取消)等更简单的解决方案怎么样。
你必须在提供内容时提供你自己的HTML(我认为这不会触发这个事件),但是你可以做这样的事情
private void webBrowser_Navigating(object sender, NavigatingEventArgs e)
{
if (e.Uri.ToString().StartsWith("myprotocol://", StringComparison.InvariantCultureIgnoreCase))
{
e.Cancel = true; // Cancels the request
// my custom code here
// (where I go get the content and push it into the browser control by
// webBrowser.NavigateToString("MyContent");
// )
}
}
这实际上应该适用于WP7和8。
其他一些事情:
1)您可能必须使用自己忙碌的小部件来指示应用程序正忙,因为一旦取消导航,内置的导航将不会出现
2)您需要记住将Web浏览器上的“IsScriptEnabled”属性设置为true(即如果您需要启用JavaScript,则默认为false,IMO很容易错过)
3)如果您需要在页面上进行后期处理,您还可以处理Navigated事件,该事件允许您在内容返回时覆盖内容(或对其进行更改)