<template>
|
<uni-web-view
|
ref="webviewContainer"
|
:class="{'uni-webview--fullscreen':fullscreen}"
|
v-on="$listeners"
|
>
|
<v-uni-resize-sensor
|
ref="sensor"
|
@resize="_resize"
|
/>
|
</uni-web-view>
|
</template>
|
|
<script>
|
export default {
|
name: 'WebView',
|
props: {
|
src: {
|
type: String,
|
default: ''
|
},
|
fullscreen: {
|
type: Boolean,
|
default: true
|
}
|
},
|
watch: {
|
src (val, oldVal) {
|
this.iframe && (this.iframe.src = this.$getRealPath(this.src))
|
}
|
},
|
mounted () {
|
this.iframe = document.createElement('iframe')
|
Object.keys(this.$attrs).forEach(key => {
|
this.iframe[key] = this.$attrs[key]
|
})
|
this.iframe.src = this.$getRealPath(this.src)
|
if (this.fullscreen) {
|
document.body.appendChild(this.iframe)
|
} else {
|
this.$refs.webviewContainer.appendChild(this.iframe)
|
}
|
this._resize()
|
},
|
activated () {
|
this.fullscreen && (this.iframe.style.display = 'block')
|
},
|
deactivated () {
|
this.fullscreen && (this.iframe.style.display = 'none')
|
},
|
beforeDestroy () {
|
this.fullscreen && document.body.removeChild(this.iframe)
|
},
|
methods: {
|
_resize () {
|
if (this.fullscreen) {
|
const {
|
top,
|
left,
|
width,
|
height
|
} = this.$el.getBoundingClientRect()
|
|
this.iframe.style.position = 'absolute'
|
this.iframe.style.display = 'block'
|
this.iframe.style.border = 0
|
this.iframe.style.top = top + 'px'
|
this.iframe.style.left = left + 'px'
|
this.iframe.style.width = width + 'px'
|
this.iframe.style.height = height + 'px'
|
} else {
|
this.iframe.style.width = this.$refs.webviewContainer.style.width || '300px'
|
this.iframe.style.height = this.$refs.webviewContainer.style.height || '150px'
|
}
|
}
|
}
|
}
|
</script>
|
<style>
|
uni-web-view {
|
display: flex;
|
}
|
uni-web-view.uni-webview--fullscreen {
|
position: absolute;
|
left: 0;
|
right: 0;
|
top: 0;
|
bottom: 0;
|
}
|
</style>
|