Custom Javascript to replace Panopto embeds in mobile apps

korina_figueroa
Community Participant
3
1738

Hi all! I’m an Instructional Technologist / Developer in Emerson College’s Instructional Technology Group.

Emerson has recently switched to using Panopto for video hosting and we’ve been working through some growing pains. We’ve heard from our reps for both Panopto and Canvas that we’re not the only school having the below problem, so I wanted to share the workaround we’re using.

The problem, as reported by our users, occurs on iOS versions of the Canvas Student and Canvas Teacher apps on pages that contain embedded Panopto videos requiring login to access.

On Android versions of the Canvas apps, users were offered the chance to login and watch the embedded videos.

Android user experience with Panopto embeds in mobile apps

On iOS, however, users encountered a frame with the text “Server Error” and “404 - File or directory not found.”

iOS user experience with Panopto embeds in mobile apps

 

Since our online courses are taught solely through Canvas and all have embedded Panopto videos on the front page, this was not the kind of first impression we wanted online learners to have of their courses.

 

We’re still working with Canvas and Panopto to find a solution, but in the meantime I wrote some custom Javascript and CSS for the Canvas mobile apps to improve the user experience. To keep the learning experience consistent across devices, the custom JS works for both iOS and Android versions of the Canvas apps.

 

First, the Javascript checks to see if there’s an iframe on the page with a source URL matching our Panopto URL (ie, https://emerson.hosted.panopto.com/).

 

Then, if it finds one or more matching iframes, it creates and adds a paragraph to the top of the page that encourages users to view the course in a browser instead:

“Warning: Some video content on this page is not supported in Canvas mobile apps. For the best experience, please access this course via a browser.”

""Android app view of the new warning message.

""
iOS app view of the new warning message.

Finally, the script replaces each matching iframe with just a plain link to the video that opens as an External Tool.

""
Android and iOS users both see the same "Watch video" link; user experience is kept consistent.

Panopto video shown with "External Tool" wrapping.
Clicking "Watch video" opens the video for playback while keeping some Canvas navigation options to return to course content.

The result is a much cleaner interface and user experience, which we’re considering keeping even when the original error gets resolved.

 

In theory this code could be adapted to replace any other iframes that don’t display properly in mobile by changing the source it’s checking for. So far we’ve only gotten reports of issues with Panopto, but that might change as more teachers and students start to use the apps.

 

I've shared a version of the code we’re using on GitHub. It's been edited to be a bit more generalized and is pure Javascript, so no need to load in jQuery. 

Canvas mobile - Custom embed user experience · GitHub 

 

If you aren’t already using custom mobile JS and CSS files, you can upload these two as-is* using these instructions: https://community.canvaslms.com/docs/DOC-10862-4214724282

If you are already using a custom CSS file for mobile, just update that file with the code from this CSS file.

 

If you’re already using a custom js file for mobile, you can copy to your file the two functions:

function replaceEmbed(frame,linkText) { … } and function customEmbedUX() { … } *

Then, just call customEmbedUX() from within whatever document ready type function you’re using.

If you use it, please keep some form of attribution with it. If you have suggestions for improvement, I’d love to hear them!

* Edited to add: One minor edit is needed in the code to make it work for you. In the customEmbedUX() function, change the Emerson URL to your Panopto URL. 

3 Comments
christopher_phi
Community Champion

Thank you, we are definitely seeing this same issue - with both Panopto and Kaltura videos. Hopefully it will get resolved soon. 

christopher_phi
Community Champion

I have touched base with Canvas and Panopto on this and have a small update for anyone interested.

From the Canvas side it sounds like their mobile apps handle LTI tools by looking for specific keywords in the code and if those keywords are present if they are present the tool is launched into a web view so it can work in the mobile app. I don't know if there is any documentation on that for LTI developers, but someone from support indicated they are looking for something like, "/external_tools\/retrieve". 

In talking with Panopto, they do have a feature request (FR-1418) to fix the issue, but there is no timeline for a fix and they have stated that they do not officially support the Canvas mobile app experience. 

Hopefully Panopto will get a fix in, but in the meantime I wonder if Canvas could do anything to make it work or provide more support, documentation for the issue. In the meantime, the fix from  @korina_figueroa ‌ is appreciated! 

korina_figueroa
Community Participant
Author

Thanks for the heads up re: feature request! It looks like there may have been some changes to make it work, but we need to do more testing.