Checking if a survey is opened via mobile device?

Plus d'informations
il y a 6 mois 4 semaines #168679 par DanielVN
DanielVN a créé le sujet : Checking if a survey is opened via mobile device?
Hi,

I have a request from a client that wants to make sure that the a potential survey will be opened only via mobile device. If not we should screen out the respondents.

Could you please advise if there is any solution for this?

Thank you very much in advance.

Best regrads
Daniel

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 6 mois 4 semaines #168680 par tpartner
tpartner a répondu au sujet : Checking if a survey is opened via mobile device?
Define "mobile device". That's a moving target now. For example a Surface Pro is both a tablet and a PC/laptop. You may be better to target screen sizes.

Cheers,
Tony Partner
Solutions, code and workarounds presented in these forums are given without any warranty, implied or otherwise.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 6 mois 4 semaines #168682 par DanielVN
DanielVN a répondu au sujet : Checking if a survey is opened via mobile device?
Hi Tony,

For this particular survey we should consider only mobile phones as mobile device.
Just to add i'm using lime version 2.73.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 6 mois 4 semaines #168683 par DenisChenu
DenisChenu a répondu au sujet : Checking if a survey is opened via mobile device?
Tony are right,

Else :
- Included javascript solution : github.com/LimeSurvey/LimeSurvey/tree/ma...answer/shortfreetext
- PHP solution (need little update for 3.X) gitlab.com/SondagesPro/findUserAgentInfo

Assistance on LimeSurvey forum and LimeSurvey core development are on my free time.
I'm not a LimeSurvey GmbH member, professional service on demand (or search sondages pro).
An error happen ? Before make a new topic : remind the Debug mode .

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 6 mois 4 semaines #168685 par orvil
orvil a répondu au sujet : Checking if a survey is opened via mobile device?
You will find a jQuery solution here, working in most cases to my experience:
detectmobilebrowsers.com/

Hint: add this to DenisChenu's script addon in an hidden equation question at the beginning of the survey

jQuery code:
/**
 * jQuery.browser.mobile (http://detectmobilebrowser.com/)
 *
 * jQuery.browser.mobile will be true if the browser is a mobile device
 *
 **/
(function(a){(jQuery.browser=jQuery.browser||{}).mobile=/(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(a)||/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(a.substr(0,4))})(navigator.userAgent||navigator.vendor||window.opera);

There is also a php version avaliable on the page I've mentioned. This could be integrated into the em_expression-helper.php =>@tpartner this brings me back to the idea of an update save extendable em_expression_helper :)

Best regards/Beste Grüße,
O. Villani

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 6 mois 4 semaines #168689 par Joffm
Joffm a répondu au sujet : Checking if a survey is opened via mobile device?
Hi, here is another JS solution
<script type="text/javascript" charset="utf-8">
	/**
	 *JavaScript Client Detection
	 * (C) viazenetti GmbH (Christian Ludwig)
	 */
	(function (window) {
		{
			var unknown = '-';
 
			// screen
			var screenSize = '';
			if (screen.width) {
				width = (screen.width) ? screen.width : '';
				height = (screen.height) ? screen.height : '';
				screenSize += '' + width + " x " + height;
			}
var vpw = Math.max(document.documentElement.clientWidth, window.innerWidth || 0); 
var vph = Math.max(document.documentElement.clientHeight, window.innerHeight || 0); 
			// browser
			var nVer = navigator.appVersion;
			var nAgt = navigator.userAgent;
			var browser = navigator.appName;
			var version = '' + parseFloat(navigator.appVersion);
			var majorVersion = parseInt(navigator.appVersion, 10);
			var nameOffset, verOffset, ix;
 
			// Opera
			if ((verOffset = nAgt.indexOf('Opera')) != -1) {
				browser = 'Opera';
				version = nAgt.substring(verOffset + 6);
				if ((verOffset = nAgt.indexOf('Version')) != -1) {
					version = nAgt.substring(verOffset + 8);
				}
			}
			// Opera Next
			if ((verOffset = nAgt.indexOf('OPR')) != -1) {
				browser = 'Opera';
				version = nAgt.substring(verOffset + 4);
			}
			// MSIE
			else if ((verOffset = nAgt.indexOf('MSIE')) != -1) {
				browser = 'Microsoft Internet Explorer';
				version = nAgt.substring(verOffset + 5);
			}
			// Chrome
			else if ((verOffset = nAgt.indexOf('Chrome')) != -1) {
				browser = 'Chrome';
				version = nAgt.substring(verOffset + 7);
			}
			// Safari
			else if ((verOffset = nAgt.indexOf('Safari')) != -1) {
				browser = 'Safari';
				version = nAgt.substring(verOffset + 7);
				if ((verOffset = nAgt.indexOf('Version')) != -1) {
					version = nAgt.substring(verOffset + 8);
				}
			}
			// Firefox
			else if ((verOffset = nAgt.indexOf('Firefox')) != -1) {
				browser = 'Firefox';
				version = nAgt.substring(verOffset + 8);
			}
			// MSIE 11+
			else if (nAgt.indexOf('Trident/') != -1) {
				browser = 'Microsoft Internet Explorer';
				version = nAgt.substring(nAgt.indexOf('rv:') + 3);
			}
			// Other browsers
			else if ((nameOffset = nAgt.lastIndexOf(' ') + 1) < (verOffset = nAgt.lastIndexOf('/'))) {
				browser = nAgt.substring(nameOffset, verOffset);
				version = nAgt.substring(verOffset + 1);
				if (browser.toLowerCase() == browser.toUpperCase()) {
					browser = navigator.appName;
				}
			}
			// trim the version string
			if ((ix = version.indexOf(';')) != -1) version = version.substring(0, ix);
			if ((ix = version.indexOf(' ')) != -1) version = version.substring(0, ix);
			if ((ix = version.indexOf(')')) != -1) version = version.substring(0, ix);
 
			majorVersion = parseInt('' + version, 10);
			if (isNaN(majorVersion)) {
				version = '' + parseFloat(navigator.appVersion);
				majorVersion = parseInt(navigator.appVersion, 10);
			}
 
			// mobile version
			var mobile = /Mobile|mini|Fennec|Android|iP(ad|od|hone)/.test(nVer);
 
			// cookie
			var cookieEnabled = (navigator.cookieEnabled) ? true : false;
 
			if (typeof navigator.cookieEnabled == 'undefined' && !cookieEnabled) {
				document.cookie = 'testcookie';
				cookieEnabled = (document.cookie.indexOf('testcookie') != -1) ? true : false;
			}
 
			// system
			var os = unknown;
			var clientStrings = [
				{ s:'Windows 10', r:/(Windows 10.0|Windows NT 10.0)/ },
				{ s:'Windows 8.1', r:/(Windows 8.1|Windows NT 6.3)/ },
				{ s:'Windows 8', r:/(Windows 8|Windows NT 6.2)/ },
				{ s:'Windows 7', r:/(Windows 7|Windows NT 6.1)/ },
				{ s:'Windows Vista', r:/Windows NT 6.0/ },
				{ s:'Windows Server 2003', r:/Windows NT 5.2/ },
				{ s:'Windows XP', r:/(Windows NT 5.1|Windows XP)/ },
				{ s:'Windows 2000', r:/(Windows NT 5.0|Windows 2000)/ },
				{ s:'Windows ME', r:/(Win 9x 4.90|Windows ME)/ },
				{ s:'Windows 98', r:/(Windows 98|Win98)/ },
				{ s:'Windows 95', r:/(Windows 95|Win95|Windows_95)/ },
				{ s:'Windows NT 4.0', r:/(Windows NT 4.0|WinNT4.0|WinNT|Windows NT)/ },
				{ s:'Windows CE', r:/Windows CE/ },
				{ s:'Windows 3.11', r:/Win16/ },
				{ s:'Android', r:/Android/ },
				{ s:'Open BSD', r:/OpenBSD/ },
				{ s:'Sun OS', r:/SunOS/ },
				{ s:'Linux', r:/(Linux|X11)/ },
				{ s:'iOS', r:/(iPhone|iPad|iPod)/ },
				{ s:'Mac OS X', r:/Mac OS X/ },
				{ s:'Mac OS', r:/(MacPPC|MacIntel|Mac_PowerPC|Macintosh)/ },
				{ s:'QNX', r:/QNX/ },
				{ s:'UNIX', r:/UNIX/ },
				{ s:'BeOS', r:/BeOS/ },
				{ s:'OS/2', r:/OS\/2/ },
				{ s:'Search Bot', r:/(nuhk|Googlebot|Yammybot|Openbot|Slurp|MSNBot|Ask Jeeves\/Teoma|ia_archiver)/ }
			];
			for (var id in clientStrings) {
				var cs = clientStrings[id];
				if (cs.r.test(nAgt)) {
					os = cs.s;
					break;
				}
			}
 
			var osVersion = unknown;
 
			if (/Windows/.test(os)) {
				osVersion = /Windows (.*)/.exec(os)[1];
				os = 'Windows';
			}
 
			switch (os) {
				case 'Mac OS X':
					osVersion = /Mac OS X (10[\.\_\d]+)/.exec(nAgt)[1];
					break;
 
				case 'Android':
					osVersion = /Android ([\.\_\d]+)/.exec(nAgt)[1];
					break;
 
				case 'iOS':
					osVersion = /OS (\d+)_(\d+)_?(\d+)?/.exec(nVer);
					osVersion = osVersion[1] + '.' + osVersion[2] + '.' + (osVersion[3] | 0);
					break;
			}
 
			// flash (you'll need to include swfobject)
			/* script src="//ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js" */
			var flashVersion = 'no check';
			if (typeof swfobject != 'undefined') {
				var fv = swfobject.getFlashPlayerVersion();
				if (fv.major > 0) {
					flashVersion = fv.major + '.' + fv.minor + ' r' + fv.release;
				}
				else  {
					flashVersion = unknown;
				}
			}
		}
 
		window.jscd = {
			screen: screenSize,
			browser: browser,
			browserVersion: version,
			browserMajorVersion: majorVersion,
			mobile: mobile,
			os: os,
			osVersion: osVersion,
			cookies: cookieEnabled,
			flashVersion: flashVersion,
            vieww : vpw,
            viewh: vph
		};
	}(this));
 
 
	$(document).ready(function() {	
 
		// Hide this question (remove double slash below to hide)
		//$('#question{QID}').hide();
 
		// Load the question
		$('#question{QID} textarea').val(
		'OS: ' + jscd.os +' '+ jscd.osVersion + '\n' +
		'Browser: ' + jscd.browser +' '+ jscd.browserMajorVersion +
		  ' (' + jscd.browserVersion + ')\n' + 
		'Mobile: ' + jscd.mobile + '\n' +
		'Flash: ' + jscd.flashVersion + '\n' +
		'Cookies: ' + jscd.cookies + '\n' +
		'Viewport width: ' + jscd.vieww + '\n' +
		'Viewport heigth: ' + jscd.viewh + '\n' +
		'Screen Size: ' + jscd.screen + '\n\n' +
		'Full User Agent: ' + navigator.userAgent
		);
    });
</script>

You can check for the "jscd.mobile" or the viewport or screensize.

Joffm


Volunteers are not paid.
Not because they are worthless, but because they are priceless

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 6 mois 4 semaines #168690 par DanielVN
DanielVN a répondu au sujet : Checking if a survey is opened via mobile device?
Thank you all for your help.

I'm afraid that i might need some step by step guidance in order to implement this in the survey.

Thank you very much in advance.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 6 mois 4 semaines #168693 par orvil
orvil a répondu au sujet : Checking if a survey is opened via mobile device?
Hi DanielVN,

may I ask for the version of LS you are working with? Will help for step-by-step :)

Best regards/Beste Grüße,
O. Villani

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 6 mois 4 semaines #168694 par DanielVN
DanielVN a répondu au sujet : Checking if a survey is opened via mobile device?
Hi Orvil,

I'm using version 2.73.0+171219 :)

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 6 mois 4 semaines #168697 par Joffm
Joffm a répondu au sujet : Checking if a survey is opened via mobile device?
Hi, Daniel,
here is a working example.

If there are any questions about the equation, don't hesitate to ask.

Joffm

Fichier attaché :

Nom du fichier : limesurvey...4985.lss
Taille du ficher :25 ko


Volunteers are not paid.
Not because they are worthless, but because they are priceless
Pièces jointes :

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 6 mois 4 semaines #168701 par DenisChenu
DenisChenu a répondu au sujet : Checking if a survey is opened via mobile device?

orvil écrit: Hint: add this to DenisChenu's script addon in an hidden equation question at the beginning of the survey

My solution is done without javascript , with hidden (totally, not by css or javascript).

Done with PHP Server var :)

Assistance on LimeSurvey forum and LimeSurvey core development are on my free time.
I'm not a LimeSurvey GmbH member, professional service on demand (or search sondages pro).
An error happen ? Before make a new topic : remind the Debug mode .

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 6 mois 4 semaines #168702 par orvil
orvil a répondu au sujet : Checking if a survey is opened via mobile device?
Hi,

simplest way:

A - decide which info is required

1.) create a new question (textarea)
2.) use the "Source" button in the Question editor
3.) copy and paste joffm's script (it gives you more information than mine) into the editor area
3) save the question an run it

You will see something like this:
 
OS: Windows 7
Browser: Chrome 66 (66.0.3359.170)
Mobile: false
Flash: no check
Cookies: true
Viewport width: 2691
Viewport heigth: 1612
Screen Size: 3072 x 1728
 
Full User Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.170 Safari/537.36

B - if necessary delete the lines not necessary. E.g. if you only need the mobile flag, reduce the part of the script (at the end)
...
...
 
$(document).ready(function() {	
 
		// Hide this question (remove double slash below to hide)
		//$('#question{QID}').hide();
 
		// Load the question
		$('#question{QID} textarea').val(
		'OS: ' + jscd.os +' '+ jscd.osVersion + '\n' +
		'Browser: ' + jscd.browser +' '+ jscd.browserMajorVersion +
		  ' (' + jscd.browserVersion + ')\n' + 
		'Mobile: ' + jscd.mobile + '\n' +
		'Flash: ' + jscd.flashVersion + '\n' +
		'Cookies: ' + jscd.cookies + '\n' +
		'Viewport width: ' + jscd.vieww + '\n' +
		'Viewport heigth: ' + jscd.viewh + '\n' +
		'Screen Size: ' + jscd.screen + '\n\n' +
		'Full User Agent: ' + navigator.userAgent
		);
    });

to:
...
...
$(document).ready(function() {	
 
		// Hide this question (remove double slash below to hide)
		//$('#question{QID}').hide();
 
		// Load the question
		$('#question{QID} textarea').val(
 
		jscd.mobile;
		);
    });
 

Best regards/Beste Grüße,
O. Villani

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 6 mois 4 semaines #168703 par DanielVN
DanielVN a répondu au sujet : Checking if a survey is opened via mobile device?
Awesome :) Thanks a lot to all of you.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 6 mois 4 semaines #168704 par orvil
orvil a répondu au sujet : Checking if a survey is opened via mobile device?
Hi,

simplest way:

A - decide which info is required

1.) create a new question (textarea)
2.) use the "Source" button in the Question editor
3.) copy and paste joffm's script (it gives you more information than mine) into the editor area
3) save the question an run it

You will see something like this:
 
OS: Windows 7
Browser: Chrome 66 (66.0.3359.170)
Mobile: false
Flash: no check
Cookies: true
Viewport width: 2691
Viewport heigth: 1612
Screen Size: 3072 x 1728
 
Full User Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.170 Safari/537.36

B - delete the output not necessary for you. E.g. if you only need the mobile flag, reduce the part of the script (at the end)
...
...
 
$(document).ready(function() {	
 
		// Hide this question (remove double slash below to hide)
		//$('#question{QID}').hide();
 
		// Load the question
		$('#question{QID} textarea').val(
		'OS: ' + jscd.os +' '+ jscd.osVersion + '\n' +
		'Browser: ' + jscd.browser +' '+ jscd.browserMajorVersion +
		  ' (' + jscd.browserVersion + ')\n' + 
		'Mobile: ' + jscd.mobile + '\n' +
		'Flash: ' + jscd.flashVersion + '\n' +
		'Cookies: ' + jscd.cookies + '\n' +
		'Viewport width: ' + jscd.vieww + '\n' +
		'Viewport heigth: ' + jscd.viewh + '\n' +
		'Screen Size: ' + jscd.screen + '\n\n' +
		'Full User Agent: ' + navigator.userAgent
		);
    });

to:
...
...
$(document).ready(function() {	
 
		// Hide this question (remove double slash below to hide)
		//$('#question{QID}').hide();
 
		// Load the question
		$('#question{QID} textarea').val(
 
		    jscd.mobile;
 
		);
    });
 

So the result is only if it's o mobile device or not:
false
And you can use this result as an switch for other questions / relevance equations.
Don't forget tho hide the question. Either by the attributes Display > Always hide this question, or by 'decommenting' the line
//$('#question{QID}').hide();
into
$('#question{QID}').hide();

Best regards/Beste Grüße,
O. Villani

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 6 mois 4 semaines #168705 par orvil
orvil a répondu au sujet : Checking if a survey is opened via mobile device?
Hi Joffm,
thanks for this script. Gives a lot of useful information on top. Will try to extend it to get the dpi too :)

Best regards/Beste Grüße,
O. Villani

Connexion ou Créer un compte pour participer à la conversation.

Commencez dès maintenant !

Créez simplement un compte et commencez à utiliser LimeSurvey dès aujourd'hui.

Inscrivez-vous maintenant

Inscrivez-vous à notre Newsletter!