视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
VUE页面中加载外部HTML的示例代码
2020-11-27 22:29:26 责编:小采
文档

前后端分离,后端提供了接口。但有一部分数据,比较产品说明文件,是存在其他的服务器上的。

所以,在页面显示的时候,如果以页面内嵌的形式显示这个说明文件。需要搞点事情以达到想要的效果。

不同以往的IFRAME标签,那种方式比较Low,另外有其他的一些BUG。

本文思路是把HTML请求以来,以v-html的形式加载到页面内部。注册全局组件【v-html-panel】

1.HtmlPanel.vue文件

<template>
 <div>
 <mu-circular-progress :size="40" v-if="loading"/>
 <div v-html="html"></div>
 </div>
</template>
<style>

</style>
<script>
 export default{
 // 使用时请使用 :url.sync=""传值
 props: {
 url: {
 required: true
 }
 },
 data () {
 return {
 loading: false,
 html: ''
 }
 },
 watch: {
 url (value) {
 this.load(value)
 }
 },
 mounted () {
 this.load(this.url)
 },
 methods: {
 load (url) {
 if (url && url.length > 0) {
 // 加载中
 this.loading = true
 let param = {
 accept: 'text/html, text/plain'
 }
 this.$http.get(url, param).then((response) => {
 this.loading = false
 // 处理HTML显示
 this.html = response.data
 }).catch(() => {
 this.loading = false
 this.html = '加载失败'
 })
 }
 }
 }
 }
</script>

htmlViewSample.vue

<template>
 <div>
 <v-html-panel :url.asyc="url1"></v-html-panel>
 <v-html-panel :url.asyc="url2"></v-html-panel>
 </div>
</template>
<style scoped>
 div{color:red}
</style>
<script>
 export default{
 data () {
 return {
 url1: '',
 url2: ''
 }
 },
 mounted () {
 this.url1 = 'http://file.xxx.com/group1/M00/0C/F5/xxxxxxxx.html'
 this.url2 = 'http://file.xxx.com/group1/M00/0D/3B/yyyyyyy.html'
 },
 methods: {
 }
 }
</script>

上一张效果图

注意事项:

  • 直接使用axios处理的GET请求,需要处理跨域
  • 外部的css样式会作用到显示的html
  • 同时加载的外部html里的script也可能会执行,需要按需处理下
  • 外部HTML文件内部的相对路径将不会被自动识别,绝对路径可以
  • NGINX跨域配置:

    (Origin如果使用*的话,好像会出错,这里直接使用请求源的地址,如果担心安全性的话,可以用if+正则条件判断下)

    location / {
     add_header Access-Control-Allow-Origin $http_origin;
     add_header Access-Control-Allow-Credentials true;
     add_header Access-Control-Allow-Methods GET;
    
     access_log /data/nginx/logs/fdfs_https.log main;
    
     ...
    }
    

    下载本文
    显示全文
    专题