2010-11-16 118 views
5

我正在構建一個AJAX深層鏈接網站。PHP:如何確定瀏覽器是否支持PHP中的JavaScript?

我想讓PHP加載頁面的所有HTML代碼,如果用戶試圖訪問該網站與JavaScript不支持的瀏覽器或如果它是一個搜索爬蟲。基本上PHP將返回整個頁面。相反,當用戶試圖訪問使用Javascript支持的瀏覽器的網站時,我希望PHP只返回模板代碼,並讓Javascript(AJAX)負責其餘部分。基本上PHP只會加載設計元素,並讓Javascript用內容填充它們。

我看着PHP的get_browser()函數,但它似乎並不是這樣一個可靠的工具。業界的做法是,瀏覽器是否支持Javascript或者它是使用PHP的搜索爬蟲?


背景

爲什麼我希望自己的網站有這樣的行爲。

由於我想通過加載地址:example.com加載主頁,它不會向PHP發送任何查詢,PHP會返回主頁的HTML代碼。但是,當用戶嘗試加載以下頁面時會導致問題:example.com#foo。因此,對於此示例,PHP將返回主頁,一旦加載主頁,Javascript(AJAX)將更改內容,以便它顯示#foo的正確內容。這會讓用戶看到主頁,因此加載時間會更慢,用戶體驗也不會那麼好。但是,如果我的PHP腳本可以計算出,如果使用Javascript支持的瀏覽器使用試圖加載頁面時,它只會返回網站,它沒有內容的模板)和JavaScript將填充該模板的內容無論是應該顯示爲#foo。另一方面,如果Javascript非分離瀏覽器或爬蟲將嘗試訪問頁面example.com#foo,則返回主頁。

我正在使用SWF地址(http://www.asual.com/swfaddress/)庫進行深層鏈接。


編輯

謝謝你們。之前我沒有想到使用<noscript></noscript>

這是我決定要做的。 PHP在默認情況下將加載如example.comexample.com#foo頁面(這是基本相同example.com從自定義片段PHP的觀點不會被髮送到服務器)與<noscript>標籤內的空白(只是視覺的模板)有關內容主頁。這樣,使用javascript的用戶將不會看到主頁,並且AJAX將根據#foo片段填充頁面的內容。另一方面,搜索抓取工具和沒有javascript的用戶將會看到一個主頁。

再次感謝您。我認爲這是非常簡單和優雅的解決方案。如果您有任何進一步的建議,請發表評論或其他答案。

+0

考慮服務器端JavaScript像node.js - http://net.tutsplus.com/tutorials/javascript-ajax/learning-serverside-javascript-with-node-js/ – ajreal 2010-11-17 05:42:59

+0

好主意。不幸的是,並非所有的服務器提供商都安裝了它,或者至少我沒有使用它。 – miki725 2010-11-17 15:00:23

回答

5

你不能這樣做使用PHP。你雖然可以做的是使用非腳本標記重定向到另一個PHP頁面,如果他們不具備的javascript:

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

是否支持搜索爬蟲? – miki725 2010-11-16 20:39:39

+0

爬行者會挑選這個,但我不知道他們是否會進入該URL。你總是可以告訴它是否在sitemap.xml文件中打該文件 – wajiw 2010-11-16 20:54:26

1

這是不可能的,你試圖做到這一點。

很少有人關閉了JS並且不知道它。

PHP在#後沒有被傳遞任何東西,只有javascript可以做任何事情。所以,即使PHP可以確定瀏覽器是否打開了javascript,它仍然無法閱讀#反正。

+0

有些人(帶屏幕閱讀器或盲文閱讀器的盲人,手機用戶等)沒有javascript。 – trusktr 2011-04-30 17:31:57

+0

這很少見,但很重要。 – trusktr 2011-04-30 17:32:14

0

你應該只建立一個AJAX查詢,設置啓用JavaScript的一個會話變量。

在加載站點上的任何其他信息之前運行此AJAX查詢,然後執行簡單重定向到實際站點。

你可以做這樣的事情的僞代碼:

的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啓用之前,AJAX查詢如何工作? – ajreal 2010-11-16 18:23:43

+0

這個想法很有效,效率不如其他。這樣就會產生不必要的流量。 – 2010-11-16 18:33:19

+0

它沒有。它會失敗,如果他們有JS禁用,因此頁面會話變量說他們可以使用JS永遠不會被設置。 – 2010-11-16 21:25:11

1

你可以包括一個鏈接裏面有一些<NOSCRIPT>標籤,用戶指向example.com#foo?javascript=disabled之類的東西。

不幸的是,瀏覽器不報告JS是否啓用,所以無法從簡單的HTTP GET中知道您是否應該發送JS依賴頁面。

0

而不是服務器試圖嗅探我們的用戶的設置,如何使用unobtrusive javascript擺在首位?這樣,如果JS不可用,頁面將優雅地降級(到期望的狀態)。

相關問題