2015-11-05 15 views
7

特定のシナリオでは、WebBrowserコントロールがNavigationCompleteまたはNavigationFailedというイベントハンドラをトリガできません。WebBrowserコントロールがイベントハンドラを起動できない

はここでどうするかだ。

  1. ネイティブのWindows Phone 8.1のSilverlightアプリはWebBrowserをインスタンス化し、それを認証WebページをロードするためのURLを提供します。
  2. WebBrowserコントロールはURLを読み込んでページをレンダリングします。
  3. ユーザーは資格情報を入力し、認証サービスに情報をPOSTするための送信ボタンをタップします。
  4. 認証サービスは資格情報を検証し、302(リダイレクト)で応答します。
  5. WebBrowser制御がリダイレクトに従います。
  6. NavigationCompleteイベントハンドラがコントロールに添付されています。リダイレクトが成功したことを示すURLパターンが見つかると、それは追加のメソッドを実行します。
  7. 追加のメソッドは、openidトークンをリダイレクトURLクエリパラメータから取得します。
  8. ユーザーは認証され、満足しています。

    ユーザーがWebBrowserが空白のページをレンダリングし任意のイベントハンドラをトリガしないステップ#3で資格情報を送信した後:実際に何が起こる

。コードは、WebBrowserコントロールによって提供されるすべてのナビゲーションイベントハンドラをリッスンしています。

私が試したもの:テストHerokuのサーバと同じように密接に私ができるようにシナリオを再現し

  • 。 WebBrowserは、herokuに再び当たるPOST送信ボタンを持つダミーの認証情報入力ページに進みます。 herokuは302と実際のリダイレクトURLで応答します。 WebBrowserはうまく機能しますO_o
  • に現在のURLを確認したり、別のページにナビゲートして空白ページエラーの後にコントロールが何らかの形で壊れていないかどうかを確認するイベントをWebBrowserに追加しました。 WebBrowserが正しく応答します。
  • コントロールでJavascriptが有効になっていることを確認してください。
  • 同じコードの90%を共有しますが、制御はWebViewで、Windows 8のタブレットアプリケーションとまったく同じサーバーサイドインフラストラクチャを使用しました。 WebViewは正常に機能します。

誰もがこのような行動をした経験がありますか?誰でもこの問題を解決する可能性のあるライブラリ(商用またはオープンソース)を知っていますか? Android bridge for WindowsまたはiOS bridge for WindowsはWindows Phone 8をサポートしていますか?

+0

完全な複製サンプルを使用するのは困難です。 –

+0

私は同じ問題を自分で持っています。私は私たちの会社独自のAuthソフトウェアでそれを再現することができました – davehenry

+0

HTTPSを使用するようにリダイレクトされているページはありますか?そうであれば、証明書は有効ですか?ホストされたブラウザコントロールで無効な証明書を持つページに移動すると、空のページが表示されることがあります。 – Don

答えて

1

デイブ、

WebBrowserコントロールは、UIスレッドで直接動作するように設計され、あなたは上記の言ったことで、あなたが非UIスレッド、状況予期しない動作でそれを実行していることが可能です...期待されるべきです。

このような場合は、Apacheコンポーネントモデル(WebBrowserクラスが該当するActiveXコンポーネントなど)にアパートメントモデルがかなり適しているため、スレッドをSingle Threaded Apartment(STA)スレッドに変更する可能性があります。そして、次のようにあなたがそれを行うことができます:STAスレッドの詳細については

yourThread.SetApartmentState(ApartmentState.STA); 

を、this pageを参照してください。 WebBrowserコントロールがAciveX成分があるので

this pageの内容も同じ問題towads関連性との点です。

希望します。 ;)

+0

あなたの答えをありがとう!私はあなたにそれがどうなるかを教えてあげます:) – davehenry

関連する問題