making security even easier

Citrix StoreFront 3.0 and HTML5 client

UPDATE: Added changes for Classic interface mode.

Citrix StoreFront 3.0 (and a few previous versions) come with a nice HTML5 client option, which to me seems stable and usable enough. However, Citrix still prefers users to install Citrix Receiver; therefore, HTML5 client is disabled by default. To enable it you have to modify the "Deploy Citrix Receiver" option for the web site in Storefront console. To have an option of using both local client and the HTML5 client, you have to choos the second option, "User Receiver for HTML5 if Local install fails" on Storefront.

Once this is done, for browsers like Safari and Google Chrome (which is my main browser), there is an option to select which client to use, i.e. even if you have local client installed, but for some reason prefer to use HTML5 client, you just select "Light Version" in the "Change Reciever" menu.

However, for Firefox and Internet Explorer this option does not appear at all and the only way to use HTML5 Client for IE and FF is to uninstall the Citrix Receiver completely.

A number of users (including myself) have asked for this feature on the Storefront offical discussion board, but the only response from Citrix employees was:

""Change Receiver" is only available for Google Chrome ... and Edge ... [because] ... protocol handler is not enabled ...

So, as usual, if Citrix cannot help, we have to deal with it ourselves. So here is the solution:

I managed to "fix" it, by modifying the isIE and isFirefox functions. You can find these functions  in "receiver/js/ctxs.core.min_12F0270C2FDA3CCD.js":

(note: if you have classic experience enabled, the file to be modified is "scripts\Default.htm.script.min.js" )


isIE:function(){return this._userAgentContains("MSIE")||this._userAgentContains("Internet Explorer")||this._userAgentContains("Trident")}

replace it with

isIE:function(){return 0}


isFirefox:function(){return this._userAgentContains("Firefox")}

replace with

isFirefox:function(){return 0 }

In our case we still wanted the plugin to be chosen by the users on first login (and first login only), so I added the following code to custom/script.js to achieve this:

var myPlugin= setInterval(setPlugin,1000);
function setPlugin() {
var cookie = document.cookie;
var myElem = document.getElementById("menuChangeClientBtn");
if (myElem === null) {} else {
if (cookie.indexOf('askFullClient=', 0) == -1) {
var expiration = new Date();
document.cookie = 'askFullClient=1;expires='+expiration+ ';path=/'; clearInterval(myPlugin);


This will give the option to choose between full and light client on first login or prompt to install receiver if it is not detected.

The modifications above will give your users the possibility to choose between local client and HTML5 client whenever they want, HTML5 client will be possible to be chosen with or without local client installed.

If you do not have any other SF customizations, you can download the script from here . Maintain the paths when extracted : ctxs.core.min_12F0270C2FDA3CCD.js goes to "receiver/js" and script.js to "custom" folder.

<< Go back to the previous page

G+ profile

follow me : github, habrahabr , linkedin
Feel free to contact me directly :
emin --at huseynov --dot com

Other projects

Google authenticator for Citrix StoreFront
Google authenticator for Citrix Web Interface 5.4
MOTP App with QR based enrolment

Not security related