2011-06-29 21 views
108

Ejemplo de Googles botón +1:¿Qué significa una secuencia de comandos con contenido src AND?

<script type="text/javascript" src="https://apis.google.com/js/plusone.js"> 
     {"parsetags": "explicit"} 
</script> 

la etiqueta script tiene un atributo src-y contenido. ¿Qué significa esto y cómo funciona?

+0

Firebug Lite utiliza este método: https://getfirebug.com/firebuglite – Brad

Respuesta

63

Los diferentes navegadores tratan esto de manera diferente. Algunos ejecutan el contenido solo si el src está incluido sin error. Algunos lo ejecutan después de intentar incluir el script src, independientemente de su éxito. Como este comportamiento no es confiable (y prohibited in HTML5), se debe evitar.

Google no confía en ningún comportamiento específico. Dado que el contenido es solo un objeto literal (un valor), ejecutarlo en realidad no haría nada excepto causar un error silencioso. El código de Google examina el contenido de la etiqueta script y ajusta su comportamiento en función de eso.

+2

¿Hay una manera más inteligente para la secuencia de comandos para mirar a los contenidos de su propia etiqueta de script (en concreto), que pasando a través del DOM? –

+9

En todos los navegadores con los que he trabajado, el contenido del script nunca se ejecutará si el atributo 'src' está presente, y realmente no es realmente un objeto literal, ese código produciría un' SyntaxError' si se ejecuta, simplemente es "JSON texto "que el script utilizará por sí mismo más tarde. – CMS

+0

@CMS notado [límite de caracteres] –

20

Si un script element tiene un atributo src, el contenido deben ser ignorados, cualquier otro comportamiento no es conforme.

Se ha sugerido en blogs (como un hack) para poner el contenido en el elemento sabiendo que no va a ser evaluada, a continuación, utilizar métodos DOM para obtener el contenido como una cadena y, o bien eval o insertarlo en un nuevo elemento script Ninguno de estos es una buena idea.

+3

¿Por qué no es una buena idea? ¿Qué sucede si se usa para inicializar un complemento de terceros? – thekingoftruth

13

De acuerdo con los elementos HTML5 draft specification, <script> con src, los atributos solo deben tener un código comentado, que está destinado a proporcionar documentación para el script. Sin embargo, no parece que Google se ajuste a esta especificación.

13

Después de que se haya cargado la secuencia de comandos, se ve dentro de su propia etiqueta de secuencia de comandos para acceder a su contenido.

se usarán algunas código similar al siguiente:

var scripts = document.getElementsByTagName("script"); 
var data = eval(scripts[scripts.length - 1].innerHTML); 

Cortesía de John Resig.

Cuestiones relacionadas