Last active
August 29, 2015 14:11
-
-
Save YusukeHirao/9ac4ad92863a588564ba to your computer and use it in GitHub Desktop.
UA / URLでの判定でリダイレクト
This file contains 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
/* | |
* alternate-link.js | |
* v0.1.0-alpha | |
* 2014 MIT | |
*/ | |
;(function() { | |
"use strict"; | |
var alternateLink = this.alternateLink || {}; | |
// Constant | |
var SP_DIR = 'sp'; | |
var SP_UA = 'iphone|android'; | |
var COOKIE_KEY_NAME = '_sp_pc_'; | |
var EXPIRES = (1 / 24) * 8; // day | |
var AUTO_INSERT_BUTTONS = true; | |
var BUTTON_INSERT_TARGET_FOR_PC = 'body'; | |
var BUTTON_FOR_PC = '<a href="#" class="sp_header" data-alternate-link="sp">スマートフォン版はこちら</a>'; | |
var BUTTON_INSERT_TARGET_FOR_SP = '#footer'; | |
var BUTTON_FOR_SP = '<div class="pc_button"><a href="#" data-alternate-link="pc">PC版はこちら</a></div>'; | |
// Variable | |
var location; | |
var host; | |
var pathname; | |
var query; | |
var hash; | |
var path; | |
var pcPath; | |
var isSpFromUrl; | |
var isSpFromUa; | |
alternateLink.getInfo = function() { | |
location = window.location; | |
host = location.origin; | |
pathname = '/' + location.pathname.replace(/^\//, ''); | |
query = location.search; | |
hash = location.hash; | |
path = pathname + query + hash; | |
pcPath = path.replace(new RegExp('^/' + SP_DIR), ''); | |
isSpFromUrl = new RegExp('^/' + SP_DIR + '[\/\s]?').test(pathname); | |
isSpFromUa = new RegExp(SP_UA, 'ig').test(navigator.userAgent); | |
// debugger; | |
}; | |
alternateLink.isSpFromUrl = function() { | |
alternateLink.getInfo(); | |
return isSpFromUrl; | |
}; | |
alternateLink.isSpFromUa = function() { | |
alternateLink.getInfo(); | |
return isSpFromUa; | |
}; | |
alternateLink.redirect = function() { | |
alternateLink.getInfo(); | |
if (isSpFromUa && !isSpFromUrl) { | |
location.href = host + '/' + SP_DIR + pcPath; | |
return; | |
} | |
if (!isSpFromUa && isSpFromUrl) { | |
location.href = host + pcPath; | |
return; | |
} | |
}; | |
alternateLink.forceLinkToPC = function() { | |
$.cookie(COOKIE_KEY_NAME, '1', { | |
path: '/', | |
expires: EXPIRES | |
}); | |
location.href = host + pcPath; | |
return; | |
} | |
alternateLink.forceLinkToSP = function() { | |
$.removeCookie(COOKIE_KEY_NAME, { | |
path: '/' | |
}); | |
location.href = host + '/' + SP_DIR + pcPath; | |
return; | |
} | |
alternateLink.autoRedirect = function() { | |
var cookie = !!$.cookie(COOKIE_KEY_NAME); | |
if (cookie) { | |
alternateLink.getInfo(); | |
if (isSpFromUa && isSpFromUrl) { | |
location.href = host + pcPath; | |
return; | |
} | |
} else { | |
alternateLink.redirect(); | |
} | |
} | |
alternateLink.autoRedirect(); | |
$(function() { | |
$('[data-alternate-link]').live('click', function() { | |
var $this = $(this); | |
var al = $this.data('alternate-link'); | |
switch (al) { | |
case 'sp': | |
alternateLink.forceLinkToSP(); | |
break; | |
case 'pc': | |
alternateLink.forceLinkToPC(); | |
break; | |
} | |
return false; | |
}); | |
// insert buttons | |
if (AUTO_INSERT_BUTTONS) { | |
alternateLink.getInfo(); | |
if (isSpFromUa && !isSpFromUrl) { | |
$(BUTTON_FOR_PC).prependTo(BUTTON_INSERT_TARGET_FOR_PC); | |
} | |
if (isSpFromUrl) { | |
$(BUTTON_FOR_SP).prependTo(BUTTON_INSERT_TARGET_FOR_SP); | |
} | |
} | |
}); | |
this.alternateLink = alternateLink; | |
}).call(this); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment