Dziwne zachowanie się dzieje podczas korzystania z IE 11. signalR scenariusz:IE 11 + SignalR nie działa
mamy niektóre funkcje typu dyspozytora gdzie dyspozytor ma pewne działania, a drugi użytkownik może zobaczyć aktualizacje żyć (zapytań) . Parametry, które są wysyłane, przychodzą dobrze i powodują aktualizacje po stronie klienta IE bez konieczności otwierania konsoli programisty.
ALE jedna metoda, która nie działa (performUpdate
- aby uzyskać wyniki zapytania - jest to serwer> połączenie klienta, a nie klient> serwer> klient) - nigdy nie jest wywoływana. TO TYLKO POJAWIA SIĘ, GDY KONSOLA DEWELOPERA JEST OTWARTY.
Oto co próbowałem:
Why JavaScript only works after opening developer tools in IE once?
SignalR : Under IE9, messages can't be received by client until I hit F12 !!!!
SignalR client doesn't work inside AngularJs controller
Niektóre fragmenty kodu
Dyspozytor strona
Po zmianie rzutu otrzymujemy aktualnie wybrane wartości i wysyłamy aktualizacje przez przewód. (To działa dobrze).
$('#Selector').on('change', function(){
var variable = $('#SomeField').val();
...
liveBatchHub.server.updateParameters(variable, ....);
});
Server Side
Kiedy dyspozytor wyszukiwania, mamy trochę kodu po stronie serwera, który wysyła informację, że wyszukiwanie zostało Ran i powiedzieć klientowi wyciągnąć rezultaty.
public void Update(string userId, Guid bId)
{
var context = GlobalHost.ConnectionManager.GetHubContext<LiveBatchViewHub>();
context.Clients.User(userId).performUpdate(bId);
}
po stronie klienta (przeglądarka z bieżących aktualizacji)
To nigdy nie jest wywoływana chyba narzędzi programistycznych jest otwarty
liveBatchHub.client.performUpdate = function (id) {
//perform update here
update(id);
};
Edit
Trochę więcej informacji, które mogłyby bądź użyteczny (nie jestem pewien, dlaczego to robi różnicę), ale wydaje się to TYLKO JEDYNIE się zdarza, gdy wykonuję połączenia z serwerem> klienta. Gdy dyspozytor zmienia parametry wyszukiwania, aktualizacja to klient> serwer> klient lub klient-rozsyłający> serwer> przeglądarka-klient, który wydaje się działać. Po kliknięciu wyszukiwania usługa w potoku wyszukiwania wywołuje stronę serwera performUpdate
(serwer> przeglądarka-klient). Nie jesteś pewien, czy to ma znaczenie?
Edycja 2 & ostateczne rozwiązanie
Oczy przekrwione, zdaję sobie sprawę, wyszedłem na zewnątrz jedną kluczową rolę na to pytanie: używamy kanciasty jak również na tej stronie. Chyba za długo wpatrywałem się w to i zostawiłem to - przepraszam. Nagrodziłem JDupontowi odpowiedź, ponieważ był na dobrej drodze: buforowanie. Ale nie buforowanie ajax jQuery, angulars $ http.
Po prostu nikt nie musi spędzać dni/nocy waląc głowami o biurko, ostatecznym rozwiązaniem było wyłączenie buforowania wywołań ajaxowych za pomocą angularów $ http.
Zrobione z here:
myModule.config(['$httpProvider', function($httpProvider) {
//initialize get if not there
if (!$httpProvider.defaults.headers.get) {
$httpProvider.defaults.headers.get = {};
}
// Answer edited to include suggestions from comments
// because previous version of code introduced browser-related errors
//disable IE ajax request caching
$httpProvider.defaults.headers.get['If-Modified-Since'] = 'Mon, 26 Jul 1997 05:00:00 GMT';
// extra
$httpProvider.defaults.headers.get['Cache-Control'] = 'no-cache';
$httpProvider.defaults.headers.get['Pragma'] = 'no-cache';
}]);
czy pojawia się błąd konsoli? –
Brak komunikatów o błędach konsoli – Jack
Czy Twoja aplikacja odwołuje się do JSON2? Jeśli tak, to czy odniesienie zostało wykonane PRZED odniesieniem do signalR.min.js? –