aboutsummaryrefslogtreecommitdiff
path: root/resources/vue/components/courseware/blocks/CoursewareIframeBlock.vue
diff options
context:
space:
mode:
Diffstat (limited to 'resources/vue/components/courseware/blocks/CoursewareIframeBlock.vue')
-rw-r--r--resources/vue/components/courseware/blocks/CoursewareIframeBlock.vue19
1 files changed, 9 insertions, 10 deletions
diff --git a/resources/vue/components/courseware/blocks/CoursewareIframeBlock.vue b/resources/vue/components/courseware/blocks/CoursewareIframeBlock.vue
index be56ab4..4ff7e45 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() {