HTML+CSS入门知识 VUE页面中如何加载外部HTML

HTML+CSS入门知识 VUE页面中如何加载外部HTML
  前后端分离,后端提供了接口。但有一部分数据,比较产品说明文件,是存在其他的服务器上的。
 
  所以,在页面显示的时候,如果以页面内嵌的形式显示这个说明文件。需要搞点事情以达到想要的效果。
 
  不同以往的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=''
 
  this.url2=''
 
  },
 
  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;
 
  …
 
  }

推荐阅读