Linia 614 z jQuery 1.7rc1:Dlaczego napisać `okno [ "eval"] .Połączenia (okienne, danych);`
window[ "eval" ].call(window, data);
Dlaczego nie po prostu napisać
eval.call(window, data);
?
Linia 614 z jQuery 1.7rc1:Dlaczego napisać `okno [ "eval"] .Połączenia (okienne, danych);`
window[ "eval" ].call(window, data);
Dlaczego nie po prostu napisać
eval.call(window, data);
?
Odpowiedź jest tutaj: Decoding jQuery,
Jim Driscoll okazało się, że na więcej standardach poszanowaniem przeglądarek, można użyć eval.call (okno, danych), ale dla Chrome i IE, rzeczy są nieco inne.
Internet Explorer: Wydaje się, że IE korzysta window.execScript (dane)
Chrome: eval.call (okno danych) przerwy w Chrome, ale okno [ "eval" ] .Połączenia (okno, dane) działa w Chrome, a także w innych przeglądarkach innych niż IE , na czym opiera się powyższe obejście.
Po obejrzeniu source, znalazłem this link. Wystarczy popatrzeć na podkreślił tekstu:
Niestety
eval.call(window,src)
przerwy na Chrome - to narzeka konteksty nie pasujące. Nieparzysta - i nie mogłem wyjaśnić, dlaczego ta może być taka. Ale kilka szczęśliwych domysłów później, i odkryłem, że window.eval.call (okno, src) działa na wszystkich przeglądarkach innych niż IE. Teraz, gdy I mówi "var j = 1", okno [j] jest zmienną, która jest ustawiona ... Więc, to dobrze. Dlaczego musimy dodać dodatkowe okno. w Chrome? Nie. Pewnie - zgaduję, ale jest zbyt prawdopodobne, że się mylę.
Tak więc window.eval
służy do uzyskania globalEval
pracy w przeglądarce Chrome.
Wydaje się działać poprawnie w Chrome 14. Ale ten artykuł pochodzi z 2009 roku, więc nie zdziwiłbym się, gdyby to błąd przeglądarki Chrome został naprawiony. –
@JamesAllardice Wciąż są użytkownicy, którzy nie używają najnowszej wersji Chrome. jQuery został zaprojektowany do obsługi jak największej liczby przeglądarek. –
Tak, wiem. Właśnie zauważyłem, że teraz działa w Chrome. Oczywiście, jQuery będzie musiała utrzymywać poprawkę starego Chrome tak długo, jak długo będzie istnieć stara wersja Chrome. –
Hmm, 'eval.call' działa dobrze przynajmniej w Chrome 14. –
Nie napisałem powodu, dla którego znaleziono tylko wyjaśnienie ... Może być Chrome 14 jest po prostu bardziej niż standardem niż starsze wersje, a ponieważ jquery ma zamiar być przeglądarką, a nie tylko przeglądarką, która go zatrzymała. – scrappedcola
Tak, to też myślałem. Właśnie zauważyłem, że działa on w Chrome 14. jQuery będzie musiał go używać tak długo, jak długo będą działać przeglądarki, w których nie działa (co będzie na zawsze!). –