Src AND içerikli bir script-Tag ne anlama geliyor?


122

Google +1 düğmesinden örnek:

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

Komut dosyası Etiketi, src özniteliğine ve içeriğe sahiptir. Bu ne anlama geliyor ve nasıl çalışıyor?


Firebug Lite bu yöntemi kullanıyor: getfirebug.com/firebuglite
Brad

Yanıtlar:


71

Farklı tarayıcılar bunu farklı şekilde ele alır. Bazıları içeriği yalnızca srchatasız eklenmişse çalıştırır . Bazıları src, başarıya bakılmaksızın , komut dosyasını dahil etmeye çalıştıktan sonra çalıştırır . Bu davranış güvenilir olmadığından (ve HTML5'te yasak olduğundan) kaçınılmalıdır.

Google belirli bir davranışa güvenmiyor. İçerik yalnızca bir nesne değişmezi (bir değer) olduğundan, onu yürütmek aslında sessiz bir hataya neden olmak dışında hiçbir şey yapmaz. Google'ın kodu, scriptetiketin içeriğine bakar ve davranışını buna göre ayarlar.


2
Komut dosyasının kendi komut dosyası etiketinin içeriğine (özellikle) bakmasının DOM üzerinden gitmekten daha akıllı bir yolu var mı?
Karl Knechtel

11
Çalıştığım tüm tarayıcılarda, eğer srcöznitelik mevcutsa ve aslında gerçek bir nesne değişmez ise , komut dosyası içeriği asla çalıştırılmayacaktır , bu kod SyntaxErrorçalıştırılırsa bir üretir , yalnızca komut dosyasının kullanacağı "JSON metni" daha sonra kendi kendine.
CMS

2
@Karl harici bir .js dosyasında kullanılır, bu size şu anda çalışan <script> düğümünün içeriğini verecektir: s=document.getElementsByTagName('script'); text = s[s.length-1].innerHTML; DOM'a dokunmayı gerektirmeyen bir komut dosyası düğümünün içeriğini getirmenin herhangi bir yolu olduğunu düşünmüyorum .
digitalbath

@CMS, IE dışındaki tüm tarayıcılarda çalışır. Burada
Jose Faeti

1
@jose - örneğiniz CMS'nin bahsettiği şey değil. Kod bağımsız bir ifade olarak çalıştırılırsa, bu bir sözdizimi hatasıdır. Örneğiniz (ve Google'ın) "çalışır" çünkü komut dosyası öğesinin içeriği src özelliği nedeniyle dikkate alınmaz .
RobG

23

Bir ederse yazı elemanı bir sahiptir src niteliğini, içerik gerekir göz ardı başka davranış olmayan uyumlu olduğunu.

(A kesmek gibi) o zaman, değerlendirmeye alınmayacaktır bilerek elemanda içerik koymak bir dize olarak içeriği almak ve ya DOM yöntemleri kullanmak O bloglarda öne sürülmüştür eval onu ya da yeni bir komut öğesinde sokun. Bunların hiçbiri iyi bir fikir değil.


4
Bu neden iyi bir fikir değil? Ya üçüncü taraf bir eklentiyi başlatmak için kullanılıyorsa?
thekingoftruth

13

Göre HTML5 taslak şartname , <script>ile elemanları srcnitelikler sadece yorumladı aşımı olması gereken komut belgelerine vermek amaçlanmıştır kodu. Yine de Google bu spesifikasyona uyuyormuş gibi görünmüyor.


13

Komut dosyası yüklendikten sonra, içeriğine erişmek için kendi komut dosyası etiketinin içine bakar.

Şuna benzer bir kod kullanacaktır:

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

John Resig'in izniyle .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.