2011-07-12 50 views
1

我想要做的是有一個頁面,如果JS啓用或不啓用,基於不同的標記。 我的想法是在首頁加載時提供一組基礎內容。當頁面正在加載的時候,也會有一些javascript函數提交ajax調用服務器的郵件數據,讓服務器知道javascript已啓用。完成ajax調用後,頁面將使用發佈數據再次刷新/再次發佈,以瞭解JS已啓用並提供基本內容以及啓用JS的內容。我的目標是儘可能無縫地實現這一目標。如果啓用了JavaScript,某些PHP可以基於嗎?

* 編輯:我應該加我想保留一頁。所以這個頁面只會被JS內容刷新。不重定向到新頁面。

我的問題是雙重的,這是可能的,如果是的話,我能得到我需要實現這個代碼中的一些方向?

回答

3

你想要做的是加載「非JavaScript的」標記的容器內,就像<div id="container"> DEFAULT/FALLBACK MARKUP HERE </div>。然後,在準備好的文檔上,進行ajax調用以獲取'javascript enabled'標記,並使用它填充#container div。

$(function(){ 

    $.ajax({ 
     url:'/javascript_enabled_html.php', 
     dataType:'html', 
     /* set your other params...*/ 
     success:function(data){ 
      $('#container').html(data); 
     } 
    }); 
}); 
+0

非常多,我正在建議。使用AJAX調用PHP腳本,該腳本將加載您想要的JS版本並替換頁面上的舊內容。它只會與JS啓用。 – pthurmond

+0

謝謝AlienWebguy,我對這種方法有兩個問題。你認爲#container內的內容仍然可以被蜘蛛抓取。如果不是,那將是一個問題。另外,我擔心使用jQuery插件來使用文檔準備功能來觸發這些功能。我不認爲通過ajax進入#container的內容能夠使用$(document).ready(function(){因爲在內容被拉入之前它已經被觸發了嗎? 我的目標是維護SEO,使用jquery插件的能力沒有任何改動 – hybrid

+0

不,它不會被蜘蛛抓取 - 沒有ajax調用會提取可抓取的數據。關於document.ready,它會工作,不用擔心:) – AlienWebguy

2

服務器端腳本沒有訪問這些信息,因爲它不與HTTP頭傳遞:如果啓用JavaScript :)

例如,它纔會被填充。 interesting solution I just found將會有兩頁。第一個JavaScript腳本重定向到第二個頁面。所以如果他們打到第二頁,你就知道他們已經啓用了javascript。

另一個解決方案依賴於無效的HTML,可能無法在所有瀏覽器上運行。使用<noscript>標籤,並把一元刷新元素中,就像這樣:

<noscript> 
    <meta http-equiv="refresh" content="0; url=http://example.com/nojavascript.php"> 
</noscript> 

然後具有的選擇解僱的onload在javascript指向JavaScript頁面重定向另一個。如果它進入nojavascript.php,它們沒有啓用js,如果它轉到第二個,它們就會啓用。

但我只是假設他們沒有打開它,除非他們被js重定向,並相應地構建第一頁。

2

你不能做一個單一的步驟,但如果你不介意的中間頁,你可以有這樣的:

<noscript> 
    <img src="js-is-disabled.php" /> 
</noscript> 

JS-是禁用。 PHP:

<?php 
session_start(); 
$_SESSION['js_is_off'] = true; 

這對其中有JS禁用任何瀏覽器中運行,只要它足夠的現代認識到<noscript>標籤的優勢。

的選擇是讓JS火的一個小片段關閉一個AJAX請求調用腳本標記JS作爲會話可用。這可能會更可靠一些,因爲如果JS工作正常,你只會發生這種情況。

+0

感謝Marc,我明白,如果JS在第一次加載時啓用,PHP無法測試它。我喜歡你的另一個想法,讓JS做出一個Ajax調用來記錄它在會話中可用。 – hybrid

0

它可以但它不應該。 你應該服務的唯一頁面假定JS是用Ajax調用的。

如果您真的需要知道(通常不會發生這種情況),您應該假設JS處於關閉狀態,直到您獲取到信息爲止。

相關問題