- Messages : 39
- Remerciements reçus 1
Checking if a survey is opened via mobile device?
- DanielVN
-
Auteur du sujet
- Hors Ligne
- Junior Lime
-
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.
- tpartner
-
- Hors Ligne
- LimeSurvey Community Team
-
- Messages : 8543
- Karma: 621
- Remerciements reçus 2620
Cheers,
Tony Partner
Solutions, code and workarounds presented in these forums are given without any warranty, implied or otherwise.
Official LimeSurvey Partner - partnersurveys.com
Connexion ou Créer un compte pour participer à la conversation.
- DanielVN
-
Auteur du sujet
- Hors Ligne
- Junior Lime
-
- Messages : 39
- Remerciements reçus 1
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.
- DenisChenu
-
- Hors Ligne
- LimeSurvey Community Team
-
- Messages : 11997
- Karma: 413
- Remerciements reçus 2190
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 , plugin development .
An error happen ? Before make a new topic : remind the Debug mode .
Connexion ou Créer un compte pour participer à la conversation.
- orvil
-
- Hors Ligne
- Gold Lime
-
- Messages : 174
- Karma: 4
- Remerciements reçus 21
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.
- Joffm
-
- Hors Ligne
- LimeSurvey Community Team
-
- Messages : 5652
- Karma: 43
- Remerciements reçus 1072
<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.
- DanielVN
-
Auteur du sujet
- Hors Ligne
- Junior Lime
-
- Messages : 39
- Remerciements reçus 1
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.
- orvil
-
- Hors Ligne
- Gold Lime
-
- Messages : 174
- Karma: 4
- Remerciements reçus 21
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.
- DanielVN
-
Auteur du sujet
- Hors Ligne
- Junior Lime
-
- Messages : 39
- Remerciements reçus 1
I'm using version 2.73.0+171219

Connexion ou Créer un compte pour participer à la conversation.
- Joffm
-
- Hors Ligne
- LimeSurvey Community Team
-
- Messages : 5652
- Karma: 43
- Remerciements reçus 1072
here is a working example.
If there are any questions about the equation, don't hesitate to ask.
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.
- DenisChenu
-
- Hors Ligne
- LimeSurvey Community Team
-
- Messages : 11997
- Karma: 413
- Remerciements reçus 2190
My solution is done without javascript , with hidden (totally, not by css or javascript).orvil écrit: Hint: add this to DenisChenu's script addon in an hidden equation question at the beginning of the survey
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 , plugin development .
An error happen ? Before make a new topic : remind the Debug mode .
Connexion ou Créer un compte pour participer à la conversation.
- orvil
-
- Hors Ligne
- Gold Lime
-
- Messages : 174
- Karma: 4
- Remerciements reçus 21
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.
- DanielVN
-
Auteur du sujet
- Hors Ligne
- Junior Lime
-
- Messages : 39
- Remerciements reçus 1

Connexion ou Créer un compte pour participer à la conversation.
- orvil
-
- Hors Ligne
- Gold Lime
-
- Messages : 174
- Karma: 4
- Remerciements reçus 21
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
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.
- orvil
-
- Hors Ligne
- Gold Lime
-
- Messages : 174
- Karma: 4
- Remerciements reçus 21
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.