2

在我的 Windows Phone 8 应用程序中,我有一个 WebBrowser 控件,我希望能够重新路由所有 http 流量,这意味着我拦截了 http GET 并从我的应用程序提供数据。不仅是 html,而且是所有流量(图像等)。我尝试使用 WebRequest.RegisterPrefix 注册我自己的 IWebRequestCreate 以提供我自己的 WebRequest。但是,我注册的 IWebRequestCreate 似乎仅用于我在自己的代码中实例化的 WebClient,而不是由 WebBrowser 控件使用。

我找到了这个线程:

如何使用 WebBrowser 控件注册自己的协议?

但似乎这种方法是不可能的。至少在 Windows Phone 7 中没有。我希望 WP8 能有更好的运气。或者也许一种完全不同的方法可以奏效?

有人可以帮帮我吗?

编辑:正如下面 Josh Mackey 所建议的那样。我也许可以通过代理运行一切。不幸的是,我不确定如何通过 Windows Phone 上的代码设置要在 webBrowser 控件上使用的代理。WP 上似乎既没有 WebRequest.DefaultWebProxy 也没有 wininet.dll。有人知道如何实现吗?

4

2 回答 2

0

正如您引用的链接所说:“WebBrowser 控件将使用 Windows Phone Internet Explorer 浏览器的 HTTP 堆栈”,因此您无法拦截它。但是,也许代理方法可能有效?

使用套接字创建一个简单的 Web 服务器,您可以告诉 WebBrowser 控件访问它吗?

我从这里得到了这个想法:Windows phone WebBrowser.Navigating event form data

于 2012-11-10T04:03:38.887 回答
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 事件,该事件可让您在内容返回时覆盖内容(或对其进行更改)

于 2012-11-13T19:33:26.277 回答