js dosyam tüm sayfalarda yüklenir. Bazı işlevler sadece ana sayfa gibi sadece http://site.com
gibi belirli sayfalarda çalıştırılmak içindir. Javascript, ana sayfanın olup olmadığını belirlemek için aranan sayfanın URL'sini okuyabilir mi?Sitedeki belirli sayfalarda özel JavaScript'i tek bir dosyadan yürütme
cevap
Konumla ilgili özellikleri almak için window.location nesnesini kullanabilirsiniz. Bazı önemli özellikler şunlardır:
window.location.href
- Geçerli sayfanın tüm URL'yi döndürürwindow.location.hostname
- Herhangi dahil döner sadece ana makine adı (alan adı, alt etki alanları)- örnek: www.google.com
window.location.pathname
- "?" Döner sadece yolu (kısım ile başlayan sorgu dizesi (URL kısmı dahil hostname/domain şu değil) ya da karma bütün bu iyi çalışıyor olsa /subdir/subpage.html
, ben diğerleri gibi (öneriyoruz: örnek (a "#" ile başlayan URL parçası))
- Bu sunucu tarafı yapmak daha iyi olacağını söyledi. Sunucu genellikle müşteriden daha iyi şeyler yapabilir. Ayrıca, tüm JS kodunuzu tek bir merkezi dosyada varsa, yalnızca bu sayfa için bir olayı tetiklemek için bu gibi bir şeyi doğrudan sayfada (sunucuda) ekleyebilirsiniz. Bu, JS'den daha güvenilir olabilir. koklama yer:
<script type="text/javascript"> // jQuery example $(document).ready(function() { // Run function that is specific for this page MyNamespace.initHome(); }); </script>
JavaScript'iniz, window.location
kullanarak geçerli URL'yi alabilir.
alert(window.location);
Ben sunucu tarafında bu anlamaya ve doğru işlevleri çağırmak/sayfa bağlı olarak doğru komut dosyalarını yüklemek için daha iyi bir fikir olabilir düşünüyorum. Sunucu tarafı genellikle geçerli sayfanın neyse ne olduğunu daha iyi bilir.
Siz adresinden as ClosureCowboy said URL adresini okuyabilirsiniz, ancak bu bir çeşit geriye doğrudur. Genellikle, bir JavaScript dosyasına ihtiyacınız olmadığını biliyorsanız, sayfaya eklemezsiniz.
her sayfa için <body>
eleman benzersiz id
niteliği koyun ve JS ne yapması gerektiğini belirlemek için kullanabilirsiniz.Bu temelde (birçok küçük JS dosyalarına birleştirir kez) benim tek küçültülmüş dosyası ile görünüyor yapmak gibi şudur:
jQuery(function($){
if (!$('body#home').length) return;
//... code specific to the home page
});
jQuery(function($){
if (!$('body#contact').length) return;
//... code specific to the contact page
});
// etc. for each page
Ama aynı kolaylıkla olarak daha verimli bir tek dosya yazabilirsiniz:
jQuery(function($){
if ($('body#home').length){
//... code specific to the home page
}
if ($('body#contact').length){
//... code specific to the contact page
}
});
İkinci kod bloğunun 'body' kimliğinin bir kez daha alması daha etkili olur mu? Eğer 'if' blokları her kontroldeki bedenin kimliğini almak yerine bu değişkeni kontrol edebilir mi? – sb89
@ sb89 Eğer ilgilenirseniz, test edin ve rapor verin. Benim çok güçlü tahminim: hızdaki herhangi bir fark bir şekilde veya diğeri farkedilemez ve ölçülemez olacaktır. – Phrogz
Her sayfa için benzersiz bir çerez ayarlamak için kullandığım küçük bir kod parçası. Tam olarak ne istediğini elde etmek için iyi çalışması gerekir. Farklı sayfalar için farklı eylemler üretmek için bir anahtar aracılığıyla çalıştırabilir veya yalnızca ana sayfada kod çalıştırmak için basit bir ifade ifadesini kullanabilirsiniz.
var sPath = window.location.pathname;
var sPage = sPath.substring(sPath.lastIndexOf('/') + 1);
console.log(sPath);
Firebug Console'da sayfayı aradığını görebilmeniz için console.log.log dosyasını ekledim. Popup etmeyi tercih ederseniz uyarın.
her sayfası (neyse önbelleğe) üzerinde yük izin, tek bir dosya içinde JS kodunun tüm tutun ama burada yakalamak var:
SADECE çağrı bunları ihtiyacı sayfasından ihtiyaç işlevler
JS dosyasında "hangi sayfa açıktayım" mantığını koymaya çalışmak sadece geriye doğru görünüyor.
- 1. Sadece belirli sayfalarda rails_xss kullan
- 2. Bir tek düğümlü dosyadan bir sınama gerçekleştirin
- 3. Belirli bir Maven aşaması yürütme
- 4. Belirli sayfalarda HTTPS'yi denetlemek için .htaccess'i kullanma
- 5. cordova-eklenti-ekran oryantasyonu belirli sayfalarda çalışmaz
- 6. PHP belirli sayfalarda div'i gizler mi?
- 7. PHP Formu aynı kod, belirli sayfalarda göndermediğinizden
- 8. bash - Belirli bir dosyadan anı mı alacaksınız?
- 9. Perl'deki büyük dosyadan belirli bir satırın okunması
- 10. özel css ve js wordpress'te ana sayfalarda
- 11. Tek bir işlemde iki farklı sorgusu yürütme
- 12. Geçerli sitedeki özel symfony2 kısıtlayıcı geçerlilik denetleyicisine erişme
- 13. Ruby - Thor belirli bir Görev yürütme
- 14. Birden çok emacs arabelleğe özel bir komut yürütme
- 15. ayıklamak svg yükleme simge bir sitedeki
- 16. wordpress sayfalarda
- 17. Bash - Belirli bir desen içermeyen bir dosyadan satırların alınması
- 18. Birden çok dosyadan okuma yapın ve tek bir dosyada sıkıştırın
- 19. Özel Gebelik Testlerini ortam koşullarına göre yürütme
- 20. TFS İş Öğesi Geçişinde Özel Kod Yürütme
- 21. Sitemdeki belirli sayfalarda http isteklerinden https'ye nasıl yazılır?
- 22. Tek tek yürütülemeyen kod işaretleyicide birden çok sorgu yürütme
- 23. Birden çok sunucuda tek iş yürütme
- 24. Sonraki sayfalarda özel başlık ile html tablosunu yazdır
- 25. MIddleman 3.0'ı Kullanma - Dinamik sayfalarda tek tek sayfa başlıklarını nasıl ayarlayabilirim?
- 26. Özel JQUERY Sayfalandırılmış Sayfalarda Yükleme Yapılmıyor (İlk Sayfa Hariç)
- 27. Özel formda şablonda tek tek alanlar oluşturma
- 28. sayfalarda değişken paylaşımları
- 29. Tüm yıl boyunca bu sitedeki ASP Klasik
- 30. PowerShell - belirli bir kapsamda komut dosyası yürütme komutunu çalıştırın
Yazdıklarınız doğrudur, ancak önerinize katılmıyorum: tarayıcı tarafından önbelleğe alınmış tek bir JS dosyasına sahip olmak sunucu ve kullanıcı performansı için genellikle sayfa başına verilen özel JS'den daha iyidir. – Phrogz
Bu doğrudur, özellikle siteniz çok sayıda JS kullanıyorsa, ancak bu yalnızca bir JS küçük dosyası ve "global" JS dosyası yoksa, sunucu tarafı algılama genellikle daha iyi bir seçimdir. Zmol'un global bir JS dosyasına sahip olduğu sorusuyla ilgili olduğunu düşünüyorum, bu yüzden tavsiyeniz muhtemelen daha iyi olacaktır. – jhartz
Cevabı, işe yarayabilecek başka bir fikri yansıtmak üzere güncelledim - sadece tüm JS'yi tek bir dosyada (sizin önerdiğiniz gibi) bulun ve yalnızca özel bir şeyi tetiklemek için gerçek sayfaya (sunucudan) 1 veya 2 satırlık kod ekleyin. – jhartz