Geçerli komut dosyası öğesinin edinilmesi:
1. Kullanım document.currentScript
document.currentScript
<script>
betiği şu anda işlenen öğeyi döndürür .
<script>
var me = document.currentScript;
</script>
Yararları
- Basit ve açık. Dürüst.
- Komut dosyası etiketini değiştirmenize gerek yok
- Eşzamansız komut dosyalarıyla çalışır (
defer
& async
)
- Dinamik olarak eklenen komut dosyalarıyla çalışır
sorunlar
- Eski tarayıcılarda ve IE'de çalışmaz.
- Modüller ile çalışmaz
<script type="module">
2. Komut dosyasını kimliğe göre seçin
Komut dosyasına bir id niteliği vermek, onu kullanarak içeriden kimliğe göre kolayca seçmenizi sağlar document.getElementById()
.
<script id="myscript">
var me = document.getElementById('myscript');
</script>
Yararları
- Basit ve açık. Dürüst.
- Neredeyse evrensel olarak destekleniyor
- Eşzamansız komut dosyalarıyla çalışır (
defer
& async
)
- Dinamik olarak eklenen komut dosyalarıyla çalışır
sorunlar
- Komut dosyası etiketine özel bir özellik eklenmesini gerektirir
id
özniteliği bazı kenar durumlarda bazı tarayıcılarda komut dosyaları için garip davranışlara neden olabilir
3. Bir data-*
nitelik kullanarak komut dosyasını seçin
Komut dosyasına bir data-*
öznitelik vermek, içinden özniteliği kolayca seçmenizi sağlar.
<script data-name="myscript">
var me = document.querySelector('script[data-name="myscript"]');
</script>
Bu, önceki seçeneğe göre çok az fayda sağlar.
Yararları
- Basit ve açık.
- Eşzamansız komut dosyalarıyla çalışır (
defer
& async
)
- Dinamik olarak eklenen komut dosyalarıyla çalışır
sorunlar
- Komut dosyası etiketine özel bir özellik eklenmesini gerektirir
- HTML5 ve
querySelector()
tüm tarayıcılarda uyumlu değil
id
Özelliği kullanmaktan daha az desteklenir
- Kenar kasaları
<script>
ile dolaşacak id
.
- Başka bir öğenin sayfada aynı veri özniteliğine ve değere sahip olması durumunda kafası karışabilir.
4. src'ye göre komut dosyasını seçin
Veri özniteliklerini kullanmak yerine, komut dosyasını kaynağa göre seçmek için seçiciyi kullanabilirsiniz:
<script src="//example.com/embed.js"></script>
Embed.js'de:
var me = document.querySelector('script[src="//example.com/embed.js"]');
Yararları
- Dürüst
- Eşzamansız komut dosyalarıyla çalışır (
defer
& async
)
- Dinamik olarak eklenen komut dosyalarıyla çalışır
- Özel özellik veya kimlik gerekmez
sorunlar
- Does not yerel komut için çalışmak
- Geliştirme ve Üretim gibi farklı ortamlarda sorunlara neden olur
- Statik ve kırılgan. Komut dosyasının yerini değiştirmek için komut dosyasının değiştirilmesi gerekir
id
Özelliği kullanmaktan daha az desteklenir
- Aynı komut dosyasını iki kez yüklerseniz sorunlara neden olur
5. İstediğinizi bulmak için tüm komut dosyalarının üzerine gelin
Ayrıca, her komut dosyası öğesinin üzerinde döngü yapabilir ve istediğimiz öğeyi seçmek için her birini ayrı ayrı 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, önceki tekniklerin her ikisini querySelector()
de öznitelikleri iyi desteklemeyen eski tarayıcılarda kullanmamızı sağlar . Örneğin:
function isMe(scriptElem){
return scriptElem.getAttribute('src') === "//example.com/embed.js";
}
Bu, hangi yaklaşımın kullanıldığının yararlarını ve sorunlarını devralır, ancak buna güvenmez, querySelector()
bu nedenle eski tarayıcılarda çalışır.
6. Son çalıştırılan komut dosyasını alın
Komut dosyaları sırayla yürütüldüğünden, son komut dosyası öğesi şu anda çalışan komut dosyası olur:
<script>
var scripts = document.getElementsByTagName( 'script' );
var me = scripts[ scripts.length - 1 ];
</script>
Yararları
- Basit.
- Neredeyse evrensel olarak destekleniyor
- Özel özellik veya kimlik gerekmez
sorunlar
- Does not asenkron komut ile çalışmak (
defer
& async
)
- Does not dinamik olarak eklenmesini komut dosyaları ile çalışmak