diff --git a/resources/vue/components/courseware/blocks/CoursewareIframeBlock.vue b/resources/vue/components/courseware/blocks/CoursewareIframeBlock.vue
index be56ab413f201a82c29a41286dc6559e9d31ea2d..4ff7e45b8e02d8ef1b69cac0f8f37ce51266e3d7 100644
--- a/resources/vue/components/courseware/blocks/CoursewareIframeBlock.vue
+++ b/resources/vue/components/courseware/blocks/CoursewareIframeBlock.vue
@@ -234,17 +234,16 @@ export default {
             this.currentUrlIsValid = this.isValidUrl(this.currentUrl);
         },
         isValidUrl(urlString) {
-            const urlPattern = new RegExp(
-                '^(https?:\\/\\/)?' + // validate protocol
-                    '((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.)+[a-z]{2,}|' + // validate domain name
-                    '((\\d{1,3}\\.){3}\\d{1,3}))' + // validate OR ip (v4) address
-                    '(\\:\\d+)?(\\/[-a-z\\d%_.~+]*)*' + // validate port and path
-                    '(\\?[;&a-z\\d%_.~+=-]*)?' + // validate query string
-                    '(\\#[-a-z\\d_]*)?$',
-                'i'
-            ); // validate fragment locator
+            if (!urlString.startsWith('http')) {
+                urlString = `${location.protocol}//${urlString}`;
+            }
 
-            return !!urlPattern.test(urlString);
+            try {
+                const url = new URL(urlString);
+                return ['http:', 'https:'].includes(url.protocol);
+            } catch (e) {
+                return false;
+            }
         },
 
         updateUrl() {