Javascript限制網頁只能在微信內建瀏覽器中訪問_javascript技巧

來源:互聯網
上載者:User

那麼問題就來了,這個網頁首先涉及到了移動web前端開發,我優先選擇了用HTML5+bootstrap組合來實現頁面的美觀效果,前端其他的任務交給javascript解決(這裡我是完全使用原生javascript代碼,沒有用到任何的架構,因為考慮到手機載入網頁的速度本來就慢,而且架構中很多用不到的功能也會隨網頁一起載入,耗費使用者流量)。

一切功能都就緒以後,客戶試用也覺得很滿意,之後我就把代碼提交到了正式的伺服器上。不過,對方又突然提到了一點:你做的頁面確實挺漂亮的,相容性也不錯,但是這個頁面用電腦上的瀏覽器也是可以訪問的,那麼其他人就可以很隨便地查看頁面的原始碼,進而copy整個頁面,能不能有什麼方法防止這一點?那麼問題就又來了,我是第一次做微信二次開發,還沒遇到過這樣的需求,怎麼搞定呢?

一時間想不出來,後來我就把這個問題先放了放,去做背景一些業務。在做背景一個資料擷取功能時,PHP代碼當中用到了$_SERVER['HTTP_USER_AGENT']這個參數,我突然想到瀏覽器訪問網頁時都會發送一個UserAgent給伺服器,它裡麵包含了一些瀏覽器及使用者作業系統的基本資料,既然微信有內建瀏覽器,那麼用微信瀏覽網頁時這個UserAgent裡面會不會帶上和微信相關的專屬的標識呢(畢竟騰訊這麼大個公司,而微信又是他們的核心產品之一)?乾脆用代碼列印一下它的UserAgent來一探究竟,javascript代碼如下:

複製代碼 代碼如下:

<script type="text/javascript">
    alert(navigator.userAgent);
</script>

在My Phone上得到了如圖所示的結果:

這一下果然還真的看到了不一樣的地方,相信聰明的朋友也已經發現了,沒錯,就是這個東西:MicroMessenger/6.0.0.50_r844973.501,斜杠後面的這一串就是我當前使用的微信的版本號碼,前面則應該是微信的一個專屬標識了。其實我一開始看成了MicroMessage,想著中文翻譯過來是“微訊息”的意思,但仔細一看發現不是的,後面查了詞典才知道Messenger這個詞有“報信者,送信者”的意思,也就不覺得奇怪了。這個標識應該來說是其他瀏覽器不會有的,那麼解決方案就來了,請看代碼:

複製代碼 代碼如下:

<script type="text/javascript">
    // 對瀏覽器的UserAgent進行正則匹配,不含有微信專屬標識的則為其他瀏覽器
    var useragent = navigator.userAgent;
    if (useragent.match(/MicroMessenger/i) != 'MicroMessenger') {
        // 這裡警告框會阻塞當前頁面繼續載入
        alert('已禁止本次訪問:您必須使用微信內建瀏覽器訪問本頁面!');
        // 以下代碼是用javascript強行關閉當前頁面
        var opened = window.open('about:blank', '_self');
        opened.opener = null;
        opened.close();
    }
</script>

這段代碼在Android、iPhone、iPad、PC上都進行了測試,只要不是在微信內部開啟網頁的,首先就會彈出上面那個警告框,此時後面的頁面是空白的,什麼都還沒載入,當點擊警告框的確定按鈕之後,最後三行代碼將強行關閉當前頁面。OK,到這裡算是實現了使用者原本的意思了,可以簡單收工了。

等等,真的可以這樣收工了嗎?你確定不會有其他問題?當然不是,其實這個方法並不會讓你高枕無憂,因為對於偽造的UserAgent,還是可以繞過這條限制的,總的來說就是防君子不防小人了,大家懂得。當然,如果哪位朋友有解決這個問題的更好方法,還麻煩在下面評論告知,技術在於相互的分享和交流嘛,呵呵。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.