Storyline 2 HTML5 published course and Tin Can problem

Jul 13, 2016


We have during the last year implemented our own LRS supporting Tin Can and reporting statements to a Learning Locker account.

In parallel our courses has moved from Flash to HTML5.

We have now discovered that the HTML5-courses does not send any requests when starting, completing or any other data to Learning Locker. Through the developer console in the browser  I do not even see any effort to make any connection of this sort.

However, the Flash edition works. We have now used minimized test courses to narrow the problem down. They have different course-id's and the start-url to story.html and story_html5.html respectively. No other differences. Both starts as they should but, as mentioned, just the Flash reports statements.

What difference is there between Flash and HTML5 in the context of Tin Can published material?

Any known bugs? Workarounds?






22 Replies
Ashley Terwilliger-Pollard

Hi Bjorn,

Our team is aware of an issue right now where you see a score of 0 when you've answered questions correctly on a Tin Can published story when submitting answers not using the Player's Submit button while viewing the HTML5 content only. Is that what you're running into? You can confirm by using the Tin Can debug log to see the data being passed back and forth and also take a look at testing it in SCORM Cloud which is an industry standard for testing LMS content. 

If that describes your issue, I'll include this thread in the report filed with our team so that I can update you here once we have additional information but I can't offer a timeframe in regards to that. If you need us to take a look at your file for a different issue can you share the .story file here with our Support Engineers?

Björn Cronqvist


It is not a case of scores not being reported.
Instead it seems the HTML5 published material does not report anything at all.

Using the Tin Can Debug is not an option since (quote):

"At this time, Tin Can API debug mode is only supported in Flash-enabled browsers. It won't work with HTML5 output."

And the problem is with the HTML5 output.
How can we troubleshoot this further?

Best regards,

Ashley Terwilliger-Pollard

Hi Bjorn,

Did you also take a look at testing it in SCORM Cloud as I mentioned? If it works normally there that would indicate there is a communication issue on the LMS side of things, not within the course itself. If you're still having difficulty at SCORM Cloud our team will want to take a look at the .story file and you can send it along to us by uploading a copy to our Support Engineers on by following this link. 

Dave willingham

Hi Alyssa, This was created in SL 2. I'm publishing as SCORM1.2 & TinCan. I'm wanting one package that I can send SCORM data to my LMS as well as tincan statements to my LRS using one course package. The URL parameter tincan=true seems to be what allows the tincan statements to send but fails to track SCORM data. The opposite is true when that tincan parameter is removed from the URL. Any resolution to this? Thanks in advance!

Leslie McKerchie

Hi Dave,

So you are editing the published output to try to gain reporting in two formats in the same course?

This is not something I'm familiar with, nor does our standard publishing window allow this method.

Hopefully someone in the community has set up something similar and will be able to chime in and assist you here.

Russell Wall

When publishing a course for tincan, the story.html file redirects to story_html5.html or story_flash.html. When it redirects to story_html5.html it adds a parameter of “&tincan=true” to the URL. When it redirects to story_flash.html it doesn’t add any new parameters to the URL.

After the materials are published within the LMS, the RusticiEngine throws an “Unexpected parameter error” and rejects my custom xAPI statements. This is do to the fact that the additional parameter “&tincan=true” shows up in the header PUT statement.

Therefore, the custom xAPI statements are recorded when published for flash, but not recorded when published for HTML5. If the redirect to the story_html5.html did not include the “&tincan=true” as an additional URL parameter, all of the custom statements would work. I confirmed this by launching my course from the LMS and removing the “&tincan=true” parameter from the URL after the launch was complete. When the parameter was removed before interacting with the course, my statements were recorded to the LRS, conversely when the parameter was left in the URL, none of my custom statements were recorded to the LRS.

The odd thing though is that ALL of the storyline default xAPI statements were recorded to the LRS. Upon further examination of the calls being sent to the LRS, I noticed that the default storyline statements in the HTML5 published course didn’t contain the additional “&tincan=true” parameter in the PUT header request. As far as I can deduce the storyline default tincan/xAPI statements are sent based off the data in the tincan.xml file. Somehow the statements being sent in this fashion do not contain the additional parameter in the header request, however the custom JSON statements I am sending via JavaScript contain the “&tincan=true” in the header and are thus rejected by the RusticiEngine.

Therefore, I am not able to leverage custom xAPI statements for granular reporting, unless Articulate removes the “&tincan=true” parameter from the HTML5 output launch URL.


Russell Wall

No need.

I've been working with our LMS Provider and the Rustici team. They instructed our provider on what default settings to change within the RusticiEngine to allow additional parameters. The change resolved the problem I was experiencing. 

I shared this experience out mainly because I noticed others were experiencing the same or similar problem without knowing the root cause. I was able to determine the root cause for my scenario with the help of our LMS/LRS provider. Is this the same root cause for all of the others who are experiencing issues with xAPI reporting for HTML5 outputs, I'm not certain. But hopefully sharing my experience from problem to solution may help others discover their root cause.

If your team would still like to contact me, I'm happy to help.  

Tanmay Ghosh

Hi Russell, 

Can you please share the sample story file and Tin Can package? I have created one course where custom tin can statements are used. The data in getting reported perfectly in my LRS, if I publish as SCORM 1.2 (tested in Scorm Cloud). However, the problem is, when I publish the course in Tin Can xAPI from SToryline, then though the tracking in Scorm cloud works, but the custome data are not getting reported in the LRS. Instead, the console throws an error as "Failed to load resource: the server responded with a status of 400 ()". But it works perfectly in SCORM 1.2.

ANy help is much appreciated.



Russell Wall


It depends on how you’re sending the custom statements. The course I was working on contains confidential information or I’d share it with you. If you’re willing to share the example you’re working on I can check out how you’re sending your custom statements and offer some suggestions.

Kind Regards,


Tanmay Ghosh

Hi Russell,

I have attached a sample Storyline 360 file, and a Tin Can published ZIP file.

The tincan.xml loads the story_html5.html file. The story_html5.html includes the following JS files:  

<script src=""></script>
<script type="text/javascript" src="cryptojs_v3.1.2.js"></script>
<script type="text/javascript" src="xapiwrapper.min.js"></script>
<script type="text/javascript" src="xapi.js"> </script>

The send_statement() function in xapi.js file is responsible for sending custom statements to LRS, which works file if I use SCORM 1.2 (File attached too).

Please let me know if you need any other information.




Russell Wall


I decided to take a quick look at your files. The problem you are experience is due to the use of xapiwrapper.js file. There is code in this file that is deprecated. During my journey of learning and applying custom xAPI statements, I too used the xapiwrapper.js method until I experienced the same problem. 

Solution: You need to use the tincan.js file or tincan-min.js file. I've uploaded both of those for you here as well as a screenshot showing the error message associated to the use of xapiwrapper.js file.

If you are in need of further assistance, please let me know. There are also some resources I can point you to if you are interested. 

Kind Regards,

Russell Wall

Russell Wall


Attached is an example storyline file I threw together for you to demonstrate how to send xAPI statements to an external LRS.

Note that you will need to update the JSON statement in the master slide for this example to function properly.

Also this example is setup to communicate with an external LRS. If you are planning to upload your course to an LMS that has a built-in LRS, the statements would need to be written differently.

Please let me know if you, or anyone else reading this post, have any further questions.

Kind Regards,

Russell Wall

Tanmay Ghosh

Hi Russell,


The new tincan.js works fine as I can send data to LRS correctly (Storyline xAPI publish). The problem is when I'm trying to get the data back on course from the LRS (actually trying to create a Leaderboard). I'm using lrs.getStatement(statement) but console is showing there is no such function available. lrs.saveStatement works correctly.

Interestingly, the html5\lib\script\app.min.js in also contains saveStatement and getStatement functions. Any idea where the problem could be?

Regards, Tanmay

This discussion is closed. You can start a new discussion or contact Articulate Support.