
è¯ãæå³ã§ã ãã«ã¹ã¯ãªãŒã³ã¢ãŒãã¯ãç»é¢å šäœããªãŒããŒããŒããããç¬èªã®ãã¡ã€ã³å ã§ããªã³ã¯ããã©ããªãå®å šã«åçãªAJAX Webã¢ããªã±ãŒã·ã§ã³ã§ã®ã¿äœ¿çšã§ããŸãã URLãå€æŽããŠããŒãžããªããŒããããšãã«ããã²ãŒã·ã§ã³ãçºçããéåžžã®Webãµã€ããé©å¿ããå Žåããã«ã¹ã¯ãªãŒã³ã¯äœ¿çšã§ãããCookieã¯æ¶ããŸããã
ã·ã³ãã«ãªãµã€ãã®ã¬ã·ã
ãã®è§£æ±ºçã¯ç¥ãããŠããŸããã以äžã®Webã¢ããªã±ãŒã·ã§ã³ã®éããè£ãããã ãã«æäŸããŸãã
ããã«è¿œå ã®Safariã¡ã¿ã¿ã°ã®ããã¥ã¡ã³ãããããŸãããããã«ãããã«æ¿å ¥ããå¿ èŠãããã¡ã¿ã¿ã°ããããŸãã
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1"> <link rel="apple-touch-icon-precomposed" href="/favicon.png">
ç»å/favicon.pngã¯ãã¹ã¯ãããã¢ã€ã³ã³ã«ãªããŸãã ã¢ã€ã³ã³ã®ãµã€ãºã«ã€ããŠã¯ã ããã¥ã¡ã³ãã§è©³ãã説æããŠããŸã ãããšãã°ãããã€ãã®ã¢ã€ã³ã³ããããŸãã
å šç»é¢ã¢ãŒã
ã¢ããªã±ãŒã·ã§ã³ããã«ã¹ã¯ãªãŒã³ã¢ãŒãã«åãæ¿ããã«ã¯ããããã®2ã€ã®ã¿ã°ã«ããã«2ã€è¿œå ããŸãã
<meta name="apple-mobile-web-app-capable" content="yes"> <meta name="apple-mobile-web-app-status-bar-style" content="black" />
éåžžã®ãµã€ãã§ã¯ç©è°ãéžãå©ç¹ããããŸãããWebã¢ããªã±ãŒã·ã§ã³ã§ã¯å¥ã®åé¡ããããŸãã
WebApplicationã®ãœãªã¥ãŒã·ã§ã³
ããã»ã©è¿°ã¹ãããã«ã Webã¢ããªã±ãŒã·ã§ã³ã«ã¯è¿œå ã®æ¡ä»¶ãæºãããŠããå¿ èŠããããŸã ãã¢ããªã±ãŒã·ã§ã³ãhrefãªã³ã¯ããã©ããªãããã«ããå¿ èŠããããŸããããã«ããããã©ãŠã¶ãŒã§ãªã³ã¯ãéããŠãã«ã¹ã¯ãªãŒã³ã¢ãŒããçµäºããŸãã ãã ããããã§ã¯
window.location.reload(true);
window.location = "/demo/path";
ãã§ã
window.location = "/demo/path";
javascriptããããªãèš±å¯ãããŠããŸãã ãããã®ç§»è¡äžãCookieã倱ãããããšã¯ãªãããã¹ãŠãæ£åžžã§ãã
次ã®ã³ãŒãã䜿çšãããšãã»ãã·ã§ã³CookieãlocalStorageã«ä¿åã§ããŸããiOSã¢ããªã±ãŒã·ã§ã³ãåãæ¿ãããšãã«Cookieã倱ããããšãCookieããåãã³ãŒãã埩å ãããããŒãžããªããŒããããããããµãŒããŒã¯ãã°ã€ã³ãŠãŒã¶ãŒãåä¿¡ãã圢åŒã§ãããæäŸããŸãã
function PersistCookie(SessionCookieName) { if (localStorage && ( navigator.userAgent.match(/iPhone/i) || navigator.userAgent.match(/iPod/i) || navigator.userAgent.match(/iPad/i) )) { var CookieSession = document.cookie.match(new RegExp(SessionCookieName + "=[^;]+")); var LocalSession = localStorage.getItem(SessionCookieName); if (CookieSession) { CookieSession = CookieSession[0].replace(SessionCookieName + "=", ""); if (LocalSession!=CookieSession) { localStorage.setItem(SessionCookieName, CookieSession); } } else if (LocalSession && LocalSession!=CookieSession) { document.cookie = SessionCookieName + "=" + LocalSession + "; path=/"; window.location.reload(true); } } }
ã³ãŒããããããããã«ãã»ãã·ã§ã³å€æ°ãä¿åããå Žæã¯2ã€ãããŸããdocument.cookieãšlocalStorage㧠ãäž¡æ¹ããèªã¿åããã³ãŒãããªãã£ãå Žæã«æžã蟌ã¿ãŸãã ã³ãŒããäž¡æ¹ã®å Žæã«ããå Žåãdocument.cookieãåªå ãããŸãã ãµãŒããŒãã»ãã·ã§ã³å€æ°ã眮ãæããlocalStorageã«æ¢ã«ããã»ãã·ã§ã³å€æ°ã«äžæžãããå¿ èŠãããå ŽåããããŸãã åŒã³åºãäŸïŒPersistCookieïŒ "SID"ïŒ; ãã©ã¡ãŒã¿ãŒã¯ãã»ãã·ã§ã³Cookieã®ååãæž¡ããŸãã ããŒãžã®èªã¿èŸŒã¿æã«åŒã³åºããè¡ãå¿ èŠããããŸãããonloadã€ãã³ããŸãã¯jQuery.readyïŒïŒã§åŒã³åºãå¿ èŠã¯ãããŸããã PHPã®å Žåãã»ãã·ã§ã³Cookieã®ååã¯ãPHPSESSIDããASP.NETã®å Žåã¯ãASP.NET_SessionIdããªã©ã§ãã ãµãŒããŒã®èšå®ãå€æŽããããããã°ã©ã ã§å€æŽãããã§ããŸãã ãŠãŒã¶ãŒããã°ã¢ãŠããããšã ã
if (localStorage) localStorage.clear();
å¿ããªãã§ãã ãã
if (localStorage) localStorage.clear();
Cookieãè¿ãããªãããã«ããŸãã ãŸããnavigator.userAgentãã§ãã¯ããªãã«ããŠãã³ãŒããiOSã ãã§ãªãåäœããããã«ããããšãã§ããŸããããããæçšãæ害ãã«ã€ããŠã¯èª¿æ»ããŠããŸããã
PSäžè¬ã«ãç§ã¯è±èªã話ããã©ãŒã©ã ã§Cookieã®åé¡ã®èª¬æãš1ã€ã®oneç ãªã¢ããã€ã¹ãèŠã€ããŸããããµãŒããŒåŽããã»ãã·ã§ã³Cookieã®æå¹æéãèšå®ããããšã§ãã ãªã圌ãããããå§ããã®ãããããªããç§ã¯ãããè©Šã¿ããã¢ããã€ã¹ã¯ããŸããããªããå€åããã¯ããã€ãã®å€ãããŒãžã§ã³ã®iOSã§ããŸããã£ãããããã¯ãã®æ¹æ³ãããŸããã£ãããã«æããã äžè¬ã«ãã»ãã·ã§ã³Cookieã«ã¯æå¹æéãèšå®ããªãã§ãã ããã ä»æ§ã«ããExpiresãã£ãŒã«ãã¯ãããŸãã ããã以å€ã®å Žåãã»ãã·ã§ã³ã®ãã®ã§ã¯ãªããªããŸãã
UPDïŒçŽ æŽãããæ©èœãçºèŠãããŸãããlocalStorageã¯ãã¡ã€ã³å šäœã暪æããŠããŸããã€ãŸããSafariã«ãã°ã€ã³ããã€ã³ã¹ããŒã«ããããæ¬äŒŒã¢ããªã±ãŒã·ã§ã³ãã«ã»ãã·ã§ã³ãæ¡åŒµãããŸããã¢ããªã±ãŒã·ã§ã³ã«ãã°ã€ã³ãããšãããŒãžãæŽæ°ããããšCookieãsafariã«è¿œå ãããŸã
UPD2ïŒ ãæ¬äŒŒã¢ããªã±ãŒã·ã§ã³ãã«æ»ããã³ã«ãCookieã®ãªã»ããã«å ããŠãããŒãžããªããŒããããŸããã€ãŸãããã©ãŒã ãéä¿¡ããŠãŠãŒã¶ãŒãå ¥åãéå§ãããšãã©ããã«åãæ¿ãããæ»ã£ãŠãã¹ãŠãæ¶ããŸãããã©ãŒã ãšå°å ¥ãããã¹ãŠã®ãã®ã ãã®ãããæçš¿åã§ãããã¹ãŠãlocalStorageã«ä¿åããå¿ èŠããããŸãã ã»ãšãã©ã®å Žåãä»»æã®ãã£ãŒã«ãã§ãã©ãŒã ãä¿åããäžè¬çã«ãããã«ãã£ããã®ã埩å ããããã«åãæ¿ãæã«ã¢ããªã±ãŒã·ã§ã³ã®ãç¶æ ããç¶æããããã®æ®éçãªãœãªã¥ãŒã·ã§ã³ãäœæããå¿ èŠããããŸãã ç¶æ ã«ã¯ãã¢ããªã±ãŒã·ã§ã³å ã®ããã²ãŒã·ã§ã³ã®ç¶æ ãã³ã³ãããŒã«ã®ç¶æ ïŒããã¯ããŒã¯ããªã¹ããªã©ïŒãã¹ã¯ããŒã«ã®ç¶æ ãããŒãžäžã®htmlããã³cssãžã®åçãªå€æŽã®ç¶æ ãå«ãŸããŸãã ãŸã éäžã§æšãŠãããŸããã ãšããã§ãããŒãžã¯ãªã»ããæã«ãµãŒããŒãããªããŒããããŸãããããã£ãã·ã¥ããååŸãããŸãã
UPD3ïŒéåžžã®Webãµã€ããæå°éã®åŽåã§ãã«ã¹ã¯ãªãŒã³ã¢ãŒãã®æ¬äŒŒã¢ããªã±ãŒã·ã§ã³ã«ããããããã¹ãŠãAJAXã«æžãæããããªãå Žåãwindow.locationã䜿çšããŠãã¹ãŠã®ãªã³ã¯ãã€ã³ã¿ãŒã»ããããããŒãžéãé·ç§»ã§ããŸãã åæã«ããã§ã«è¿°ã¹ãããã«ãSafariã¯ããªã³ã¯ãå¥ã®ãã¡ã€ã³ã«ã€ãªãã£ãŠããªãéãããã©ãŠã¶ãŒã¢ãŒãã«ç§»è¡ããŸããã jQueryãœãªã¥ãŒã·ã§ã³ã¯æ¬¡ã®ãšããã§ãã
$('a').live('click', function(e) { e.preventDefault(); window.location = $(this).attr('href'); });
ãã ããã¢ããªã±ãŒã·ã§ã³ãåãæ¿ãããšãã«ãµã€ããæåã®ããŒãžã«ãªã»ããããããšã«ã¯åé¡ãæ®ããŸãã ããã¯ãCookieãšåæ§ã«æ±ãããŸã-localStorageã«ä¿åããŸãã ãã¡ããããªã³ã¯ã®ãªã³ã¯å ã決å®ãããã¡ã€ã³å ã®ãªã³ã¯ã®ã¿ãlocalStorageã«ä¿åããå¿ èŠããããŸããä»ã®ãã¹ãŠã¯ããšã«ããSafariã§éããŸãã jQueryã®æ¡åŒµæ©èœã§åéããããã¹ãŠã®ææã¯æ¬¡ã®ãšããã§ãã
(function($) { $.platform = { iPhone: navigator.userAgent.match(/iPhone/i), iPod: navigator.userAgent.match(/iPod/i), iPad: navigator.userAgent.match(/iPad/i), Android: navigator.userAgent.match(/Android/i) }; $.platform.iOS = $.platform.iPhone || $.platform.iPod || $.platform.iPad; $.platform.Mobile = $.platform.iOS || $.platform.Android; $.extend({ fixLinks: function(persist) { if ($.platform.iOS) { if (persist == null) persist = true; persist = persist && localStorage; if (persist) { var CurrentLocation = window.location.pathname + window.location.search; var StoredLocation = localStorage.getItem("location"); if (StoredLocation && StoredLocation !== CurrentLocation) { window.location = StoredLocation; } } $('a').live('click',function(e) { e.preventDefault(); if (persist && this.host === window.location.host) localStorage.setItem("location", this.pathname + this.search); window.location = this.href; }); } }, fixCookie: function (SessionCookieName) { if (localStorage && $.platform.iOS) { var CookieSession = document.cookie.match(new RegExp(SessionCookieName + "=[^;]+")); var LocalSession = localStorage.getItem(SessionCookieName); if (CookieSession) { CookieSession = CookieSession[0].replace(SessionCookieName + "=", ""); if (LocalSession!=CookieSession) { localStorage.setItem(SessionCookieName,CookieSession); } } else if (LocalSession && LocalSession !== CookieSession) { document.cookie = SessionCookieName + "=" + LocalSession + "; path=/"; window.location.reload(true); } } } }); })( jQuery );
æ¡åŒµæ©èœã®äœ¿çšã¯éåžžã«ç°¡åã§ãã©ã€ãã©ãªã«jsãã¡ã€ã«ãå«ããŠãããŒãžãèªã¿èŸŒããšãã«åŒã³åºããæ¿å ¥ããŸãã
- iOSãã«ã¹ã¯ãªãŒã³ã¢ããªã±ãŒã·ã§ã³ã®ãªã³ã¯ãä»ããSafariã§ã®äžèŠãªçµäºã®åé¡ãä¿®æ£ããlocalStorageã®ãã¡ã€ã³å ã®çŸåšã®URLãä¿å/埩å ããã«ã¯ïŒ$ .fixLinksïŒïŒ;
- iOSçšSafariã®çµäºã®åé¡ãä¿®æ£ããŸãããlocalStorageã®URLãèŠããŠããªãå ŽåïŒ$ .fixLinksïŒfalseïŒ;
- ã»ãã·ã§ã³Cookieã®ãªã»ããã«é¢ããåé¡ãä¿®æ£ããŸãã$ .fixCookieïŒ "SID"ïŒ; ããã§ããSIDãã¯ã»ãã·ã§ã³Cookieã®ååã§ãã