1

Windows Phone 8 の WebBrowser コントロールに bing.com を読み込むのに問題があります。これを行うと、WP8 検索アプリが起動するようです (電話の [検索] ボタンを押すのと同じです)。問題は、その検索アプリで結果をクリックすると、元のアプリに戻らず、結果を表示するために IE に移動することです。これは私にはうまくいかず、WebBrowser の動作に重大な欠陥 (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 コントロールで、ユーザー エージェントを偽造することは可能ですか?
  • Bing.com が要求を処理する方法に影響を与えるために、WebBrowser.Uri.Flags プロパティの項目の 1 つを削除または追加できますか?
  • これらのいずれも機能しない場合は、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 アプリケーションの WebBrowser コントロールで www.bing.com が検索アプリを起動するのを防ぐ方法を知っている人はいますか?

ありがとうございました!

4

2 に答える 2

2

これを処理するためのより良い方法があるかどうかはわかりませんが、解決策を見つけました。戻るボタンをクリックしたときに完全に機能するようになっていないので、より確実な解決策が見つかった場合は回答を更新します。これは WP8 の WebBrowser コントロールの大きな欠陥だと思います。

コードは次のとおりです。

private bool _customHeaderRequest = false;

private void MainBrowser_Navigating(object sender, NavigatingEventArgs e)
{
    string host = e.Uri.Host.ToLowerInvariant().Trim();

    if ((host == "bing.com" || host.EndsWith(".bing.com")) && !_customHeaderRequest)
    {
        e.Cancel = true;

        Dispatcher.BeginInvoke(() =>
            MainBrowser.Navigate(e.Uri, null,
                "User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; NOKIA; Lumia 710)\r\n"));

        _customHeaderRequest = true;
        return;
    }

    _customHeaderRequest = false;
}

private void MainBrowser_Navigated(object sender, NavigationEventArgs e)
{
    _customHeaderRequest = false;
}
于 2014-01-08T06:20:39.463 に答える
1

エミュレーターにアクセスできませんが、携帯電話で試してみました。

  1. 「デスクトップ バージョンを優先」して m.bing.com を開いた場合、リダイレクトは発生しません。警告: モバイル版はあまりきれいではありません。

  2. WebBrowser でスクリプトを無効にしてみてください。これにより、リダイレクトが停止する可能性があります。

  3. Google を使用できる可能性はありますか?

于 2014-01-08T03:14:22.113 に答える