2011-10-27 9 views

Respuesta

7

La respuesta está aquí: Decoding jQuery,

Jim Driscoll encontró que para más estándares, respetando los navegadores, usted podría utilizar eval.call (ventana, datos), pero para Chrome e IE, cosas son un poco diferentes

Internet Explorer: Parece que IE utiliza window.execScript (datos)

Chrome: eval.call (ventana, datos) se rompe en Chrome, pero la ventana [ "eval" ] .call (ventana, los datos) funciona en Chrome, y también en otros navegadores que no sean IE , así es como se basan las soluciones anteriores.

+1

Hmm, 'eval.call' funciona bien en Chrome 14 al menos. –

+1

No escribí el motivo, solo encontré una explicación .... Podría ser que Chrome 14 está a la altura de las normas que las versiones anteriores y, como jquery pretende ser un navegador cruzado y no solo el navegador actual, lo conservaron. – scrappedcola

+0

Sí, eso es lo que pensé también. Solo estaba notando que funciona en Chrome 14. jQuery tendrá que mantenerlo mientras los navegadores en los que no funciona estén alrededor (¡lo que será para siempre!) –

3

Después de mirar el source, he encontrado this link. Echar un vistazo al texto subrayado:

Lamentablemente, eval.call(window,src) roturas en Chrome - se queja de que no coincidan con contextos. Extraño, y no pude buscar en Google por qué este podría ser así. Pero un par de adivinaciones más tarde, y descubrí que window.eval.call (window, src) funciona en todos los navegadores que no sean IE. Ahora, cuando digo "var j = 1", la ventana [j] es la variable que está configurada ... Entonces, eso es bueno. ¿Por qué tenemos que agregar la ventana extra? en Chrome? No seguro - Podría adivinar, pero es muy probable que sea incorrecto.

Por lo tanto, window.eval se utiliza para obtener globalEval trabajo en Chrome.

+0

Parece funcionar bien en Chrome 14. Pero ese artículo es de 2009, así que no me sorprendería si fuera un error de Chrome que ahora está arreglado. –

+0

@JamesAllardice Todavía hay usuarios que no usan la versión más nueva de Chrome. jQuery está diseñado para admitir tantos navegadores como sea posible. –

+0

Sí, lo sé. Solo estaba notando que ahora funciona en Chrome. Por supuesto, jQuery tendrá que mantener el viejo Chrome fix allí mientras el viejo Chrome esté cerca. –

Cuestiones relacionadas