Pracuję nad witryną Umbraco, która musi działać w dużych przeglądarkach, w tym w IE 11, i natknąłem się na dziwny problem, który mogę tylko powielić na IE 11.W jaki sposób utraciłem wbudowane obiekty JavaScript i wszystkie zmienne globalne?
W pewnym momencie skrypt dla TinyMCE plug-in próbuje wykonać ten kod (głęboki około cztery połączenia) w odpowiedzi na blur
imprezy:
function classTest(cls) { return new RegExp("(^|\\s)" + cls + "(?:$|\\s)\\s*"); }
i generuje „Obiekt nie obsługuje tej akcji” wyjątek podczas próby utworzenia obiekt RegExp. cls
jest zdefiniowany i ma wartość, jakiej oczekuję.
Podczas pauzy (przy użyciu debugera Visual Studio) na nieobsługiwanym wyjątku, zrobiłem małe sprawdzanie.
Okazuje się, że RegExp
to undefined
. Znalazłem ten niesamowity .
Nieco więcej badań wykazało, że WSZYSTKIE wbudowane obiekty były niezdefiniowane. Numer, macierz, obiekt, matematyka ... wszystkie. Ponadto, chociaż mogłem wyliczyć klucze globalne, wszystkie wartości również były niezdefiniowane.
Jeszcze dziwniej, mogłem użyć okien konsoli lub natychmiastowego wykonania w ramach problematycznego zakresu, aby utworzyć obiekty wyrażenia regularnego, używając składni /pattern/
.
Ale ten warunek jest prawdziwy tylko w zakresie obsługi zdarzeń. Zaraz po zakończeniu procedury obsługi zdarzeń wszystkie wbudowane obiekty i wartości zmiennych globalnych zostały przywrócone.
Jak można stracić dostęp do wbudowanych obiektów JavaScript, bez utraty dostępu do podstawowego parsera JavaScript i silnika?
A po zagubieniu można je przywrócić?
nie zajmie długo za niepoprawny fragment kodu do iteracji poprzez każdy wbudowany i zerowanie go ... Dość dziwne, że "Array = undefined" wydaje się być skuteczne, jak również "RegExp", itp. – tmslnz
Nie używałem IE na zawsze, ale czy to możliwe, że IE zacienia obiekt 'window' (na którym są wszystkie wbudowane obiekty)? – Jack
@Jack To dobra myśl. Obiekt 'window' przy wejściu do procedury obsługi zdarzeń nie zawiera tych obiektów globalnych. Zaczynam podejrzewać, że dzieje się tak dlatego, że obsługuje on 'blur' - może IE nie zakończyło wiązania obiektów globalnych JavaScript? Nie jestem pewien, wciąż wyglądam ... –