Last active
March 28, 2016 10:59
-
-
Save cyocun/dda390156ce404340b5c to your computer and use it in GitHub Desktop.
detect mobile and desktop
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| (function () { | |
| 'use strict'; | |
| // http://loopj.com/2010/06/12/simple-way-to-extract-get-params-from-a-javascript-script-tag/ | |
| var getParams = function (script_name) { | |
| // Find all script tags | |
| var scripts = document.getElementsByTagName("script"); | |
| // Look through them trying to find ourselves | |
| for (var i = 0; i < scripts.length; i++) { | |
| if (scripts[i].src.indexOf("/" + script_name) > -1) { | |
| // Get an array of key=value strings of params | |
| var pa = scripts[i].src.split("?").pop().split("&"); | |
| // Split each key=value into array, the construct js object | |
| var p = {}; | |
| for (var j = 0; j < pa.length; j++) { | |
| var kv = pa[j].split("="); | |
| p[kv[0]] = kv[1]; | |
| } | |
| return p; | |
| } | |
| } | |
| // No scripts match | |
| return {}; | |
| }, | |
| _detect = getParams('detecting.js').d, | |
| _redirectDir = getParams('detecting.js').r || '', | |
| _bRelativePath = _redirectDir.match(/^\.\//) || false, | |
| _char = '/', | |
| _ua = navigator.userAgent || navigator.vendor || window.opera, | |
| _locationPath = location.pathname, | |
| _pathArry = _locationPath.split(_char), | |
| _commonRegex = /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\-/i.test(_ua.substr(0, 4)), | |
| _isMobile = (/(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|xda|xiino/i.test(_ua) || _commonRegex), | |
| _isMobileAndTablet = (/(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|xda|xiino|android|ipad|playbook|silk/i.test(_ua) || _commonRegex), // Reference http://stackoverflow.com/questions/11381673/detecting-a-mobile-browser | |
| generateRedirectURL = function (_type) { | |
| var _url; | |
| _pathArry.splice(_pathArry.indexOf('sp'), 1); | |
| // リダイレクトURLの指定がない&SPは頭にSPを追加 | |
| if (!_redirectDir && _type === 'sp') { | |
| return '/sp' + _locationPath + window.location.search; | |
| } | |
| // リダイレクトURLの指定がない&PCは頭からSPを削除 | |
| if (!_redirectDir && _type === 'pc') { | |
| return _pathArry.join(_char) + window.location.search; | |
| } | |
| // リダイレクトURLの指定がある && 相対パス | |
| if (_redirectDir && _bRelativePath) { | |
| return _locationPath + _redirectDir + window.location.search; | |
| } | |
| // リダイレクトURLの指定がある && 絶対パス | |
| if (_redirectDir && !_bRelativePath) { | |
| return _redirectDir + window.location.search; | |
| } | |
| }; | |
| switch (_detect) { | |
| case 'pc': | |
| // PCサイト | |
| // SP or TBで見てる | |
| if (_isMobileAndTablet) { | |
| location.href = generateRedirectURL('sp'); | |
| } | |
| break; | |
| case 'pc-tb': | |
| // PC & TBサイト | |
| //スマホで見てる | |
| if (_isMobile) { | |
| location.href = generateRedirectURL('sp'); | |
| } | |
| break; | |
| case 'sp': | |
| // SPサイト | |
| // SP以外でみてる | |
| if (!_isMobile) { | |
| location.href = generateRedirectURL('pc'); | |
| } | |
| break; | |
| case 'sp-tb': | |
| // SP & TBサイト | |
| // SP,TB以外でみてる | |
| if (!_isMobileAndTablet) { | |
| location.href = generateRedirectURL('pc'); | |
| } | |
| break; | |
| } | |
| })(); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| opctions: | |
| r -> redirectURL. './'で始まればRelative。'/'で始まればAbsolute。 | |
| d -> detect type. Read below. | |
| // Desktop site | |
| // http://foobar.com/dir/name/ | |
| <script src="/detecting.js?d=pc" type="text/javascript"></script> | |
| // Desktop & tablet site | |
| // http://foobar.com/dir/name/ | |
| <script src="/detecting.js?d=pc-tb" type="text/javascript"></script> | |
| // mobile | |
| // http://foobar.com/sp/dir/name/ | |
| <script src="/detecting.js?d=sp" type="text/javascript"></script> | |
| // mobile & tabket site | |
| // http://foobar.com/sp/dir/name/ | |
| <script src="/detecting.js?d=sp-tb" type="text/javascript"></script> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment