2015-11-05 45 views
7

W określonym scenariuszu kontrola WebBrowser nie wyzwala procedury obsługi zdarzenia NavigationComplete lub NavigationFailed.Kontrola WebBrowser nie wyzwala procedur obsługi zdarzeń

Oto, co powinno się zdarzyć:

  1. Native Windows Phone 8.1 Silverlight app instancję WebBrowser i zapewnia mu link, aby załadować stronę internetową uwierzytelniania.
  2. WebBrowser kontrola ładuje adres URL i renderuje stronę.
  3. Wprowadza dane uwierzytelniające użytkownika i naciska przycisk Wyślij, aby wysłać informację do auth usługi.
  4. Usługa uwierzytelniania sprawdza poprawność poświadczeń i odpowiada za pomocą 302 (przekierowanie).
  5. WebBrowser kontrola następuje po przekierowaniu.
  6. Obsługa zdarzeń jest dołączona do formantu. Po znalezieniu wzorca adresu URL, który wskazuje, że przekierowanie powiodło się, wykonuje dodatkową metodę.
  7. Dodatkowa metoda pobiera token openid z parametrów zapytania adresu URL przekierowania.
  8. Użytkownik jest uwierzytelniony i szczęśliwy.

Co właściwie się dzieje:

Po użytkownik przekazuje swoje poświadczenia w kroku # 3 WebBrowser świadczy pustą białą stronę i nie powoduje żadnychobsługi zdarzeń. Kod nasłuchuje dla każdego programu obsługi zdarzenia nawigacyjnego dostarczonego przez kontrolkę WebBrowser.

Co próbowałem:

  • Odtworzone scenariusz tak ściśle, jak mogę z serwera testowego Heroku. WebBrowser przechodzi do fałszywej strony wejściowej poświadczeń za pomocą przycisku POST submit, który ponownie trafia w heroku; heroku odpowiada 302 i rzeczywistym adresem URL przekierowania. W WebBrowser działa dobrze O_o
  • Dodany onTap wydarzeń do WebBrowser który sprawdza aktualne url/przejście do innej strony, aby zobaczyć, czy kontrola jest jakoś uszkodzony po pustym błędu strony. WebBrowser reaguje poprawnie.
  • Upewniono się, że w formancie włączony jest Javascript.
  • Używana jest ta sama infrastruktura po stronie serwera z aplikacją na tablety z systemem Windows 8, która ma 90% tego samego kodu, ale z kontrolką WebView. WebView działa dobrze.

Wszelkie sugestie? Czy ktoś doświadczył tej kontroli działając w ten sposób? Czy ktoś wie o bibliotece, która może rozwiązać ten problem (komercyjne lub open source). Czy Android bridge for Windows lub iOS bridge for Windows obsługuje telefon z systemem Windows 8?

+0

Trudno pomóc bez pełnej próbki repro. –

+0

Tak, sam mam ten sam problem. Mogłem tylko odtworzyć to za pomocą naszego firmowego autorskiego oprogramowania Auth – davehenry

+0

Czy strona jest przekierowywana, aby korzystać z HTTPS? Jeśli tak, czy certyfikat jest ważny? Przechodzenie do strony z unieważnionym certyfikatem na sterowniku przeglądarki czasami wyświetla pustą stronę. – Don

Odpowiedz

1

Dave,

Kontrola WebBrowser jest przeznaczony do pracy bezpośrednio w wątkach UI, a przez to, co powiedziano powyżej, możliwe jest, że może być uruchomiony go w wątku non-UI, sytuację, w której nieoczekiwane zachowanie należy ... oczekiwać.

Jeśli tak jest, możesz spróbować zmienić wątek w wątek Single Threaded Apartment (STA), ponieważ model apatmentu jest bardziej odpowiedni dla komponentów COM (takich jak komponenty ActiveX, w których spada klasa WebBrowser) i można to zrobić w następujący sposób:

yourThread.SetApartmentState(ApartmentState.STA); 

więcej informacji na temat STA wątków, należy zapoznać się this page.

Ponieważ kontrolka WebBrowser jest składnikiem AciveX, zawartość this page jest również istotna i wskazuje na ten sam problem.

Mam nadzieję, że to pomaga. ;)

+0

Dzięki za odpowiedź! Dam ci znać, jak to idzie :) – davehenry