2011-10-27 11 views

Odpowiedz

7

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.

+1

Hmm, 'eval.call' działa dobrze przynajmniej w Chrome 14. –

+1

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

+0

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!). –

3

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.

+0

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. –

+0

@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. –

+0

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. –