mirror of
https://github.com/kuaifan/dootask.git
synced 2025-12-11 18:42:54 +00:00
49 lines
1.2 KiB
Vue
49 lines
1.2 KiB
Vue
<template>
|
|
<iframe v-show="src" ref="iframe" :src="src"></iframe>
|
|
</template>
|
|
|
|
<script>
|
|
export default {
|
|
name: "IFrame",
|
|
props: {
|
|
src: {
|
|
type: String,
|
|
default: ''
|
|
},
|
|
},
|
|
|
|
mounted() {
|
|
this.$refs.iframe.addEventListener('load', this.handleLoad)
|
|
window.addEventListener('message', this.handleMessage)
|
|
},
|
|
|
|
beforeDestroy() {
|
|
this.$refs.iframe.removeEventListener('load', this.handleLoad)
|
|
window.removeEventListener('message', this.handleMessage)
|
|
},
|
|
|
|
methods: {
|
|
handleLoad() {
|
|
this.$emit("on-load")
|
|
},
|
|
|
|
handleMessage({data, source}) {
|
|
if (source !== this.$refs.iframe?.contentWindow) {
|
|
return;
|
|
}
|
|
data = $A.jsonParse(data);
|
|
if (data.source === 'fileView' && data.action === 'picture') {
|
|
this.$store.dispatch("previewImage", {index: data.params.index, list: data.params.array})
|
|
}
|
|
this.$emit("on-message", data)
|
|
},
|
|
|
|
postMessage(message, targetOrigin = "*") {
|
|
if (this.$refs.iframe) {
|
|
this.$refs.iframe.contentWindow.postMessage(message, targetOrigin);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
</script>
|