2010-11-16 26 views
5

Bir AJAX derin bağlantılı site yapıyorum.PHP: Tarayıcının javascript'i PHP'de destekleyip desteklemediğini nasıl belirleyebilirim?

Kullanıcı siteye Javascript destekli olmayan bir tarayıcıyla veya bir arama tarayıcısıysa siteye erişmeye çalışıyorsa, PHP'nin sayfanın tüm HTML kodunu yüklemesini istiyorum. Temel olarak PHP tüm sayfayı geri döndürecektir. Tersi durumda, kullanıcı siteye Javascript destekli tarayıcı ile erişmeye çalışırken, PHP'nin sadece şablon kodunu döndürmesini ve Javascript'in (AJAX) diğerlerinin ilgilenmesine izin vermesini istiyorum. Temel olarak PHP sadece tasarım öğelerini yükler ve Javascript'in bunları içerikle doldurmasına izin verir.

PHP'nin get_browser() işlevine baktım, ancak böyle güvenilir bir araç gibi görünmüyor. Endüstrinin uygulaması, tarayıcının Javascript'i destekleyip desteklemediğini ya da PHP kullanan bir arama tarayıcısı olup olmadığını görüyor mu?


Arkaplan: Sitenin bu davranışı istiyorum Neden

.

Ana sayfanın yüklenmesini istemiş olduğumdan beri, PHP'ye herhangi bir sorgu göndermeyen adres: example.com, PHP ana sayfanın HTML kodunu döndürür. Ancak, kullanıcı aşağıdaki sayfayı yüklemeye çalıştığında sorunlara neden olur: example.com#foo. Bu nedenle, bu örnek için PHP ana sayfayı geri yükleyecektir ve ana sayfa yüklendikten sonra, Javascript (AJAX), içeriği #foo için uygun içerik gösterecek şekilde değiştirecektir. Bu, kullanıcının ana sayfayı görmesini sağlayacaktır, bu nedenle yükleme süresi daha yavaş olacak ve kullanıcı deneyimi bu kadar hoş olmayacaktır. Ancak, eğer PHP betiğimde, Javascript destekli tarayıcı ile kullanım sayfayı yüklemeye çalışıyorsa, yalnızca içeriği olmayan web sitesinin şablonunu döndürecektir) ve javascript'in bu şablonun içeriğiyle ne varsa #foo için gösterilmesi gerekiyordu. Öte yandan, Javascript'in ayrılmamış bir tarayıcı veya bir tarayıcı sayfanın example.com#foo sayfasına erişmeye çalışacaksa, ana sayfa geri dönecektir.

Derin bağlantı için SWFaddress (http://www.asual.com/swfaddress/) kitaplığını kullanıyorum.


Düzenleme teşekkürler çocuklar. Daha önce <noscript></noscript> kullanmayı düşünmedim.

İşte yapmaya karar verdim. Varsayılan olarak PHP, example.com veya example.com#foo (esas olarak example.com ile PHP'nin bakış açısından aynıdır, çünkü tanıma göre parçalar sunucuya gönderilmez) boş (sadece görsel şablon) <noscript> etiketi içeriğinin içeriğine ana sayfa Bu şekilde javascript kullanıcıları ana sayfayı görmeyecek ve AJAX sayfanın içeriğini #foo parçasına göre dolduracaktır. Öte yandan, javascript içermeyen tarayıcıları ve kullanıcıları bir giriş sayfası görür.

Tekrar teşekkürler. Bence bu oldukça basit ve zarif bir çözüm. Başka önerileriniz varsa, lütfen bir yorum veya başka bir yanıt gönderin.

+0

Sunucu tarafı javascript gibi düşünün node.js - http://net.tutsplus.com/tutorials/javascript-ajax/learning-serverside-javascript-with-node-js/ – ajreal

+0

İyi fikir. Ne yazık ki, tüm sunucu sağlayıcıları yüklememiş veya en azından kullanıyorum değil. – miki725

cevap

5

Bunu PHP kullanarak yapamazsınız.

<noscript> 
<meta http-equiv="refresh" content="0; URL=nojavascript.php"> 
</noscript> 
+0

, bu arama tarayıcıları tarafından destekleniyor mu? – miki725

+0

Tarayıcılar bunu alacak, ancak bu URL'ye gideceklerini bilmiyorum. Bir sitemap.xml dosyasında bu dosyaya vurup vurmayacağınızı her zaman söyleyebilirsiniz – wajiw

1

Bunu yapmaya çalıştığınız şekilde bunu gerçekleştirmek mümkün değil.

Birisinin JS'nin kapalı olduğunu ve bunu bilmediği nadirdir.

PHP, #'dan sonra hiçbir şey geçmez, yalnızca javascript bununla bir şey yapabilir. Yani, eğer tarayıcının javascript'i açık olup olmadığını PHP belirlese bile, yine de # okuyamadı.

+0

Bazı insanlar (ekran okuyucuları veya braille okuyucuları, cep telefonu kullanıcıları, vb. Ile kör kişiler) javascript içermiyor. – trusktr

+0

Nadir, ama bilmek önemlidir. – trusktr

0

Sadece etkin javascript için bir oturum değişkeni belirleyen bir AJAX sorgusu inşa etmeliyiz: Ne olsa yapabileceğini onlar javascript yoksa başka bir php sayfasına yönlendirmek için bir noscript etiketi kullanmaktır.

Bu AJAX sorgusunu, sitede bulunan diğer bilgiler yüklenmeden önce çalıştırın ve sonra gerçek siteye basit bir yönlendirme yapın.

Bu sözde kodu gibi bir şey yapabilirsiniz:

index.php:

ajax(check_js.php); 
redirect(main_page.php); 

check_js.php

$_SESSION['js_enable'] = true; 

main_page.php

if($_SESSION['js_enable'] == true) { 
    //execute page 
} else { 
    header("Location: no_js_error.php"); 
} 
+0

@James Thompson - JavaScript'in etkin olduğunu bilmeden AJAX sorgusu nasıl çalışır? – ajreal

+0

Bu fikir, diğerlerinden daha az verimli çalışır. Bu şekilde gereksiz trafiğe sahip olursunuz. –

+0

Yapmıyor. JS devre dışı bırakıldıysa başarısız olur ve böylece JS kullanabileceklerini söyleyen sayfa oturum değişkeni asla ayarlanmayacaktır. –

1

Yapabilirsin bir bağlantı ekle Kullanıcıyı example.com#foo?javascript=disabled gibi bir şeye işaret eden bazı <NOSCRIPT> etiketlerinin içinde.

Ne yazık ki, tarayıcılar JS'nin etkin olup olmadığını bildirmezler, böylece JS'ye bağlı sayfalar göndermeniz gerekip gerekmediğini basit bir HTTP GET'den öğrenmenin bir yolu yoktur.

0

Sunucunun yerine, kullanıcı ayarlarımızı algılamaya çalışmak yerine, ilk etapta unobtrusive javascript'u kullanmaya ne dersiniz? Bu şekilde, JS mevcut değilse sayfa, incelikle (istenen duruma) düşecektir.

İlgili konular