2013-11-24 41 views
1

我創建了一個網頁,但我不希望它能夠在電腦瀏覽器中打開。我只希望它可以用於手機。我知道使用user_agent可以知道它是移動設備還是計算機(我已經使用.htaccess),但是可以在移動視圖中將其作爲計算機還是在計算機中有一個選項可供選擇所以即使我使用user_agent也可以在電腦中查看移動設備。有沒有更好的方法來檢查它是真的是電腦還是手機?如何知道它是否真的是手機

如果可能,我想完全限制在計算機中打開它的選項。

+1

爲什麼你會這麼在乎?這並不妨礙任何*人*看到該網站,即使您可以排除非移動用戶代理,他們可以切換到移動設備。 – delnan

+4

昨天,我買了一個帶鍵盤和鼠標的巨型手機(32英寸屏幕)。應該允許訪問您的網站? –

+0

問題是我們想要防止能夠在電腦中打開它,使下載一些內容更加困難。從移動設備上更難(我不確定它是否是不可變的),但從計算機我知道這是可能的。所以這是主要原因。我們也在創建移動應用程序,但我們希望有兩個選項可用。順便說一句我有一個phonegap媒體對象和他的異步函數的問題:http:// stackoverflow。com/questions/20149316/asynchronous-functions-not-working-in-phonegap-media –

回答

0

如果使用JSP實現Web頁面,您可以使用此代碼來找到客戶端設備是移動設備:

boolean isMobile = false; 

String ua = request.getHeader("User-Agent").toLowerCase(); 
if (ua.matches("(?i).*((android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm(os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino).*") || ua.substring(0, 4).matches("(?i)1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s)|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp(i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac(|\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt(|\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg(g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v)|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v)|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-|)|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-")) { 
    isMobile = true; 
} 

此代碼將作爲服務器端代碼執行。

您可能要檢查的客戶端設備的客戶端,您可以使用JavaScript如下: Detecting a mobile browser

0

據我所知,沒有方法,這將是在如果檢測100%準確客戶端是否是手機。您可以檢查用戶代理,但用戶代理可能被欺騙。你可以依靠javascript來檢測屏幕大小,但JavaScript是公開的,因此你應該總是假定每個人都知道你的JavaScript的一切。你可以用javascript來偷偷摸摸地檢測一些尚未在移動瀏覽器中實現的東西,但是在桌面瀏覽器中可以正常工作,並根據這一點做出決定。最後它並不重要:它可以被欺騙。

唯一不能被欺騙的是遠程ip地址。如果你有一個巨大的數據庫,其中包含有關用於移動互聯網和其他ips的ip的數據,那麼你可以根據這個決定做出決定。很可能您需要爲此使用外部服務,這將會帶來顯着的性能提升。

即使那麼,你想達到什麼?如果用戶不能下載某些內容,爲什麼要把它放在網上?如果您網站的安全性取決於您的網站,那麼您沒有以正確的方式處理問題。如果這些文件是保密的,您應該輸入正確的用戶名/密碼或公鑰/私鑰以保護它們。依靠緩慢/移動互聯網來保護東西是一個壞主意。

0

http://matthewhudson.me/projects/device.js/

包括device.js和

例如(JS):

document.write("device.ios() === ", "<span class=\"" + device.ios() + "\">" + device.ios() + "</span>", "<br />"); 
    document.write("device.iphone() === ", "<span class=\"" + device.iphone() + "\">" + device.iphone() + "</span>", "<br />"); 
    document.write("device.ipod() === ", "<span class=\"" + device.ipod() + "\">" + device.ipod() + "</span>", "<br />"); 
    document.write("device.ipad() === ", "<span class=\"" + device.ipad() + "\">" + device.ipad() + "</span>", "<br />"); 
    document.write("device.android() === ", "<span class=\"" + device.android() + "\">" + device.android() + "</span>", "<br />"); 
    document.write("device.androidPhone() === ", "<span class=\"" + device.androidPhone() + "\">" + device.androidPhone() + "</span>", "<br />"); 
    document.write("device.androidTablet() === ", "<span class=\"" + device.androidTablet() + "\">" + device.androidTablet() + "</span>", "<br />"); 
    document.write("device.blackberry() === ", "<span class=\"" + device.blackberry() + "\">" + device.blackberry() + "</span>", "<br />"); 
    document.write("device.blackberryPhone() === ", "<span class=\"" + device.blackberryPhone() + "\">" + device.blackberryPhone() + "</span>", "<br />"); 
    document.write("device.blackberryTablet() === ", "<span class=\"" + device.blackberryTablet() + "\">" + device.blackberryTablet() + "</span>", "<br />"); 
    document.write("device.windows() === ", "<span class=\"" + device.windows() + "\">" + device.windows() + "</span>", "<br />"); 
    document.write("device.windowsPhone() === ", "<span class=\"" + device.windowsPhone() + "\">" + device.windowsPhone() + "</span>", "<br />"); 
    document.write("device.windowsTablet() === ", "<span class=\"" + device.windowsTablet() + "\">" + device.windowsTablet() + "</span>", "<br />"); 
    document.write("device.fxos() === ", "<span class=\"" + device.fxos() + "\">" + device.fxos() + "</span>", "<br />"); 
    document.write("device.fxosPhone() === ", "<span class=\"" + device.fxosPhone() + "\">" + device.fxosPhone() + "</span>", "<br />"); 
    document.write("device.fxosTablet() === ", "<span class=\"" + device.fxosTablet() + "\">" + device.fxosTablet() + "</span>", "<br />"); 
    document.write("device.mobile() === ", "<span class=\"" + device.mobile() + "\">" + device.mobile() + "</span>", "<br />"); 
    document.write("device.tablet() === ", "<span class=\"" + device.tablet() + "\">" + device.tablet() + "</span>", "<br />"); 
    document.write("device.portrait() === ", "<span class=\"" + device.portrait() + "\">" + device.portrait() + "</span>", "<br />"); 
    document.write("device.landscape() === ", "<span class=\"" + device.landscape() + "\">" + device.landscape() + "</span>", "<br />"); 

CSS:

.true { 
    color: green; 
    font-weight: bold; 
} 
相關問題