diff --git a/src/utils/WidgetUtils.js b/src/utils/WidgetUtils.js index 7d6bf5e90d..e92fd1ed27 100644 --- a/src/utils/WidgetUtils.js +++ b/src/utils/WidgetUtils.js @@ -474,7 +474,7 @@ export default class WidgetUtils { return encodeURIComponent(`${widgetLocation}::${widgetUrl}`); } - static getLocalJitsiWrapperUrl(opts: {forLocalRender?: boolean}) { + static getLocalJitsiWrapperUrl(opts: {forLocalRender?: boolean}={}) { // NB. we can't just encodeURIComponent all of these because the $ signs need to be there const queryString = [ 'conferenceDomain=$domain', @@ -485,19 +485,16 @@ export default class WidgetUtils { 'userId=$matrix_user_id', ].join('&'); - let currentUrl = window.location.href.split('#')[0]; - if (!currentUrl.startsWith("https://") && !opts.forLocalRender) { + let baseUrl = window.location; + if (window.location.protocol !== "https:" && !opts.forLocalRender) { // Use an external wrapper if we're not locally rendering the widget. This is usually // the URL that will end up in the widget event, so we want to make sure it's relatively // safe to send. // We'll end up using a local render URL when we see a Jitsi widget anyways, so this is // really just for backwards compatibility and to appease the spec. - currentUrl = "https://riot.im/app"; + baseUrl = "https://riot.im/app"; } - if (!currentUrl.endsWith('/')) { - currentUrl = `${currentUrl}/`; - } - - return currentUrl + "jitsi.html#" + queryString; + const url = new URL("jitsi.html#" + queryString, baseUrl); // this strips hash fragment from baseUrl + return url.href; } }