SORU
31 Aralık 2008, ÇARŞAMBA


Nasıl şu anda yürütülen komut dosyası yüklenen komut dosyası etiketi referans olabilir miyim?

Şu anda çalıştığı javascript yüklenen script öğesi referans alabilir miyim?

İşte durum. Bir "" senaryoyu yüksek HEAD etiketi altında. sayfa, ilk iş olarak yüklenen ustası var

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<script type="text/javascript" src="scripts.js"></script>

"Scripts.js" isteğe bağlı diğer betikleri yükleme yapmak gerekir. bir komut dosyası var Normal yöntemi oldukça KAFA öğesi oluşturma bitirmedi çünkü HEAD etiketi başvuru olmadan yeni bir komut eklemek istiyorum çünkü benim için işe yaramaz:

document.getElementsByTagName('head')[0].appendChild(v);

Ne yapmak istediğimi o zaman benim yeni dinamik olarak eklemek benim için geçerli komut dosyası yüklenen script öğesi sonra DOM içine script etiketleri yüklü referanstır.

<script type="text/javascript" src="scripts.js"></script>
loaded by scripts.js--><script type="text/javascript" src="new_script1.js"></script>
loaded by scripts.js --><script type="text/javascript" src="new_script2.js"></script>

CEVAP
30 Mart 2014, Pazar


Nasıl geçerli komut dosyası öğe almak için:

1. document.currentScript kullanın

document.currentScript şu anda işlenmekte olan <script> öğesi döndürür.

<script>
var me = document.currentScript;
</script>

Faydaları

  • Basit ve açık. Güvenilir.
  • Script etiketi değişiklik yapmanıza gerek yok
  • Zaman uyumsuz komut ile çalışır(defer & async)
  • Komut dosyaları ile çalışır dinamik olarak eklenmiş

Sorunları

  • Eski tarayıcılarda çalışır ve IE.

2. Kimliği seçin komut dosyası

Senaryoyu kimlik niteliği vererek kolayca kimliği seçin kullanarak içinden izin verir document.getElementById().

<script id="myscript">
var me = document.getElementById('myscript');
</script>

Faydaları

  • Basit ve açık. Güvenilir.
  • Evrensel olarak desteklenen neredeyse
  • Zaman uyumsuz komut (defer & async) ile çalışır
  • Komut dosyaları ile çalışır dinamik olarak eklenmiş

Sorunları

  • Gerektirir bir özel komut dosyası etiketi için öznitelik ekleme
  • id bazı kenar durumlarda bazı tarayıcılar için komut dosyaları garip davranışlara neden olabilir özniteliği

3. Script data-* bir öznitelik kullanarak seçin

Script data-* bir nitelik vererek kolayca içinden seçmek izin verir.

<script data-name="myscript">
var me = document.querySelector('script[data-name="myscript"]');
</script>

Bu bir önceki seçeneği üzerinden birkaç faydaları vardır.

Faydaları

  • Basit ve açık.
  • Zaman uyumsuz komut ile çalışır(defer & async)
  • Komut dosyaları ile çalışır dinamik olarak eklenmiş

Sorunları

  • Gerektirir bir özel komut dosyası etiketi için öznitelik ekleme
  • Tüm tarayıcılar HTML5 ve querySelector() uyumlu değil
  • Az id özniteliği kullanılarak daha yaygın olarak desteklenen
  • Etrafında alacak id kenar durumlarda <script>.
  • Eğer başka bir öğe sayfada aynı veri özniteliği ve değeri varsa karışık olabilir.

4. Src tarafından komut dosyası seçin

Veri özniteliklerini kullanmak yerine, seçici tarafından Kaynak komut dosyası seçebilirsiniz:

<script src="//example.com/embed.js"></script>

İçinde embed.js:

var me = document.querySelector('script[src="//example.com/embed.js"]');

Faydaları

  • Güvenilir
  • Zaman uyumsuz komut (defer & async) ile çalışır
  • Komut dosyaları ile çalışır dinamik olarak eklenmiş
  • Özel öznitelikleri veya kimliği gerek yok

Sorunları

  • Yokdeğilyerel komut için çalışma
  • Farklı ortamlarda sorunlara neden olur, Geliştirme ve Üretim gibi
  • Statik ve kırılgan. Komut dosyasının konumunu değiştirmek, script değiştirilmesi gerekir
  • Az id özniteliği kullanılarak daha yaygın olarak desteklenen
  • Bir problem yoksa neden sana iki kez aynı komut dosyası yüklenemedi

5. Tüm döngü istediğinizi bulmak için komut

Ayrıca her komut dosyası öğesi döngü ve her biri ayrı ayrı istediğimiz birini seçmek için kontrol edebiliriz:

<script>
var me = null;
var scripts = document.getElementsByTagName("script")
for (var i = 0; i < scripts.length;   i) {
    if( isMe(scripts[i])){
      me = scripts[i];
    }
}
</script>

Bu nitelikler querySelector() iyi desteklemeyen eski tarayıcılar hem de önceki teknikler kullanmamıza olanak sağlar. Örneğin:

function isMe(scriptElem){
    return scriptElem.getAttribute('src') === "//example.com/embed.js";
}

Bu ne yaklaşım alınır faydalar ve sorunlar devralır, ama eski tarayıcılarda çalışması querySelector() dayanmaz.

6. Son yürütülen komut dosyası

Komut dosyaları sırayla yürütülür beri, son script öğesi çok sık şu anda çalışan script olacak:

<script>
var scripts = document.getElementsByTagName( 'script' );
var me = scripts[ scripts.length - 1 ];
</script>

Faydaları

  • Basit.
  • Evrensel olarak desteklenen neredeyse
  • Özel öznitelikleri veya kimliği gerek yok

Sorunları

  • Yokdeğilzaman uyumsuz komut ile (defer & async) iş
  • Yokdeğilkomut dosyaları ile çalışmak dinamik olarak eklenmiş

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Madeon

    Madeon

    31 Ocak 2010
  • XxMinayaxX1

    XxMinayaxX1

    9 Mayıs 2012