2

私の Windows Phone 8 アプリケーションには、すべての http トラフィックを再ルーティングできるようにしたい WebBrowser コントロールがあります。つまり、http GET をインターセプトし、アプリからデータを提供します。htmlだけでなく、すべてのトラフィック(画像など)。独自の WebRequests を提供するために、WebRequest.RegisterPrefix を使用して独自の IWebRequestCreate を登録しようとしました。ただし、登録した IWebRequestCreate は、WebBrowser コントロールではなく、独自のコードでインスタンス化した WebClient に対してのみ使用されるようです。

このスレッドを見つけました:

WebBrowser コントロールを使用して独自のプロトコルを登録する方法は?

しかし、そのアプローチは不可能だったようです。少なくとも Windows Phone 7 ではそうではありません。それとも、まったく別の方法でうまくいくのでしょうか?

誰でも私を助けることができますか?

編集:以下のジョシュ・マッキーの提案による。プロキシ経由ですべてを実行できる場合があります。残念ながら、Windows Phone のコードから webBrowser コントロールで使用するプロキシを設定する方法がわかりません。WebRequest.DefaultWebProxy も wininet.dll も WP では利用できないようです。これをどのように達成できるか知っている人はいますか?

4

2 に答える 2

0

参照したリンクにあるように、「WebBrowser コントロールは Windows Phone Internet Explorer ブラウザーの HTTP スタックを使用する」ため、インターセプトできません。しかし、おそらくプロキシアプローチが機能する可能性がありますか?

ソケットを使用して、代わりに WebBrowser コントロールにアクセスするように指示できる単純な Web サーバーを作成しますか?

ここからアイデアを得ました: 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 に答える