• Stars
    star
    417
  • Rank 103,829 (Top 3 %)
  • Language
    JavaScript
  • License
    MIT License
  • Created about 14 years ago
  • Updated over 10 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

JS to handle the redirection to the mobile version of your site

JS Mobile Redirection

redirection_mobile.js is a utility script that covers a basic scenario for redirecting your website to a mobile verison through JavaScript.

Build Status

It also covers the scenario where a user wants to access the Desktop version of the site from a mobile device (sometimes the desktop version has more functionality).

The script handles tablets too, you can choose to redirect user to a mobile site or to a specific site for tablets (7'' or 10'').

Getting started

The script needs to be put in the desktop version of the site.

The script sniffs the User-Agent string and it decides if the redirection needs to happen.

If the user decides to view the 'desktop' version from a mobile site, the user is kept on that version for the whole session. (sessionStorage object has been used). There is a fallback for old browsers that don't support sessionStorage, and a cookie is used. The cookie expiries in one hour or you configure the expiry time.

To use this function, you need to import the "redirection_mobile.js" in your page and call the SA.redirection_mobile() function.

	<!doctype html>
	<html>
		<head>
			<script src="redirection-mobile.js"></script>
			<script>
				SA.redirection_mobile();
			</script>
		</head>

Config

The function accepts few configurations:

  • mobile_prefix : prefix appended to the hostname. E.g. "m" to redirect to "m.domain.com". "m" is the default value if the property is not specified.

  • mobile_url : mobile url to use for the redirection (without the protocol), such as "whatever.com"/example to redirect to "whatever.com/example". If "mobile_prefix" exists too, "mobile_prefix" is ignored. Empty string is the default value.

  • mobile_scheme : url scheme (http/https) of the mobile site domain, such as "https" to redirect to "https://m.domain.com". The protocol of the current page is the default value.

  • redirection_param : parameter to pass in the querystring of the URL to avoid the redirection (the value must be equal to "false" to avoid redirection). Default value is "mobile_redirect". Eg: http://domain.com?mobile_redirect=false It is the name of the item in the sessionStorage (or cookie name) used to avoid mobile redirection.

  • cookie_hours : number of hours the cookie needs to exist after redirection to desktop site. "1" is the default value.

  • tablet_redirection : boolean value that enables/disables(default) the redirection for tablet such as iPad, Samsung Galaxy Tab, Kindle or Motorola Xoom. - Default:false. The value needs to be a string (so wrapped in double or single quotes). If 'tablet_host' parameter not specified, the user will be redirected to the same URL as for mobile devices.

  • tablet_host : hostname to use for the redirection in case user is using a tablet to access the site. Default value is ""

  • keep_path : boolean to determine if the destination url needs to keep the path from the original url. Default value is 'false'

  • keep_query : boolean to determine if the destination url needs to keep the querystring from the original url. Default value is 'false'

  • beforeredirection_callback : if specified, callback launched before the redirection happens. If a falsy value is returned from the callback the redirection doesn't happen.

  • append_referrer : boolean to determine if the document.referrer should be appended to the destination url. document.referrer will be URI encoded prior to appending. Default value is 'false'

  • append_referrer_key : if specified, the key used for the document.referrer. defaults to 'original_referrer'

Examples

If you want to redirect the user to "http://mobile.domain.com" from "http://domain.com":

	SA.redirection_mobile ({
		redirection_param : "mobile_redirection",
		mobile_prefix : "mobile",
		cookie_hours : "2" 
	});

If you want to redirect the user to "https://whatever.com/example":

	SA.redirection_mobile ({
		mobile_url : "whatever.com/example",
		mobile_prefix : "https"
	});

If you want to redirect the user to "https://whatever.com/example" even when using an Ipad or a generic tablet:

	SA.redirection_mobile ({
		tablet_redirection : "true",
		mobile_url : "whatever.com/example",
		mobile_prefix : "https"
	});

If you want to avoid the redirection to happen from a callback, this is the invocation you need:

	SA.redirection_mobile ({
		beforeredirection_callback : (function(){alert("!"); return false;})
	});

If you want to redirect the user to two different URLs depending on the device the user is using (mobile or tablet):

	SA.redirection_mobile ({
		mobile_url : "mobile.whatever.com",
		tablet_host : "tablet.whatever.com",
	});

If the user accesses to "whatever.com/page1" and you want to redirect him to "mobile.whatever.com/page1":

	SA.redirection_mobile ({
		mobile_prefix : "mobile",
		keep_path : true,
		keep_query : true
	});

What is 'redirection-mobile-self.js'?

Alternatively you can use "redirection_mobile_self.js", that is an anonyimous self-executing function using the default values for the different properties:

  • "mobile_prefix" : "m"
  • "redirection_param" : "mobile_redirect"
  • "cookie_hours" : 1
  • "mobile_url" : ""
  • "mobile_scheme" : protocol of the current page
  • "tablet_redirection" : "false"
  • "keep_path" : false
  • "keep_query" : false
  • "tablet_host" : ""
  • "beforeredirection_callback" : n/a

It doesn't need any configuration or any invocation, so you just need to drop "it "redirection_mobile_self.js" on your webserver and call the script from your HTML.

	<!doctype html>
	<html>
		<head>
			<script src="redirection_mobile_self.js"></script>
		</head>
	
		<script src="/js/redirection_mobile_self.js"></script>
	

I also created 'redirection-mobile-testable.js' that is just a copy from "redirection_mobile.js", but it's using few arguments such as "document", "window", "navigator" for testing purpose.

Testing / Building the plugin

After getting node and npm, install grunt and grunt-jasmine-runner.

npm install grunt npm install grunt-jasmine-runner

You can run Jasmine specs through phantomjs with :

grunt jasmine

If you don't have phantomjs, please download it from here

You can run JSHint, Jasmine specs and minification tool simply launching: grunt

Licence

Copyright (c) 2011-2012 Sebastiano Armeli-Battana Licensed under the MIT license. (https://github.com/sebarmeli/JS-Redirection-Mobile-Site/blob/master/MIT-LICENSE.