您的当前位置:首页VUE页面中加载外部HTML的示例代码
广告

VUE页面中加载外部HTML的示例代码

2023-12-08 来源:哗驼汽车网

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

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

不同以往的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; ...}

    小编还为您整理了以下内容,可能对您也有帮助:

    如何利用Vue.js库中的v-html指令添加html元素

    1、新建html文档,然后在head标签中引入vue的js文件,这里以引入cdn文件为例:

    2、在body标签中添加一个id为“app”的div标签,然后在这个div标签中再添加一个div标签,在vue中添加一个变量数据,然后用“{{}}”符号将变量引入到div标签中,并且在标签中添加“v-html="变量"v-html="变量"”属性:

    3、用浏览器打开html文档,这时可以在页面中看到被v-html指令添加的html元素:

    如何利用Vue.js库中的v-html指令添加html元素

    js在特定位置动态添加html可以利用HTML DOM appendChild() 方法。

    例子:

    var div1 = document.createElement("div");

    div1.id = "div1";

    var div2 = document.createElement("div");

    div2.id ="div2";

    document.body.appendChild(div1);

    div1.appendChild(div2);

    appendChild()定义和用法:

    appendChild() 方法向节点添加最后一个子节点。

    提示:如果您需要创建包含文本的新段落,请记得添加到段落的文本的文本节点,然后向文档添加该段落。

    您也可以使用 appendChild() 方法从一个元素向另一个元素中移动元素。

    从一个列表向另一个列表中移动列表项:

    var node=document.getElementById("myList2").lastChild;

    document.getElementById("myList1").appendChild(node);

    如何利用Vue.js库中的v-html指令添加html元素

    第一步,创建静态页面vhtml.html,并引入vue.js文件

    第二步,在<body></body>元素内插入两个div,一个作为外层div,另外一个作为子div,并在父div绑定v-html指令

    第三步,绑定v-html指令数据,这里设置为字符串

    第四步,Vue.js库的v-html指令是插入html元素,修改datas为包含<p></p>标签

    第五步,预览该静态页面,这时会看到页面显示为“v-html指令”

    第六步,将调试打开,这时发现<div></div>中有个<p></p>标签

    vue文件内嵌 HTML文件iframe用法

    首先vue里面内嵌html文件必须存放在项目 public文件夹下,可以和vue里面index.html同级如图所示:

    我这里的 draw_PLS.html存放的是内嵌的html,map.js则是HTML里面的js。

    以我项目为例
    1.首先在vue页面里面通过iframe 的形式引用 注意 ref的值和 name的值我这里保持一致了,接下来都会有用到。(注意src里面的路径要和项目的路径一致哦)
    例:this.srcurl=' http://192.168.0.0:9527/draw_PLS.html'

    2.通过 声明一个iframes获取到iframe,然后添加一个name的属性,this.datavallist为我需要传递的数组,通过 iframes.postMessage 的方法进行传递。(cmd:'dian'用于做判断使用,可以不传)

    3.在 draw_PLS.html 做如下操作

    这样就可以获取到啦。
    :有什么地方不懂的可以找我共同进步,写的不够好还请多多包涵。

    vue文件内嵌 HTML文件iframe用法

    首先vue里面内嵌html文件必须存放在项目 public文件夹下,可以和vue里面index.html同级如图所示:

    我这里的 draw_PLS.html存放的是内嵌的html,map.js则是HTML里面的js。

    以我项目为例
    1.首先在vue页面里面通过iframe 的形式引用 注意 ref的值和 name的值我这里保持一致了,接下来都会有用到。(注意src里面的路径要和项目的路径一致哦)
    例:this.srcurl=' http://192.168.0.0:9527/draw_PLS.html'

    2.通过 声明一个iframes获取到iframe,然后添加一个name的属性,this.datavallist为我需要传递的数组,通过 iframes.postMessage 的方法进行传递。(cmd:'dian'用于做判断使用,可以不传)

    3.在 draw_PLS.html 做如下操作

    这样就可以获取到啦。
    :有什么地方不懂的可以找我共同进步,写的不够好还请多多包涵。

    vue-cli2 组件内嵌HTML文件

    (如有错误,欢迎指正~~)

    在Vue要使用文件上传,找到一个bootstrap编写好的demo,打算直接用,嵌入vue中。demo主要使用jquery和webuploader,jquery和webuploader引用是使用script引入的。要兼容现在的Vue项目。

    实验一:

    打算在Vue的组件里使用script引入demo里同样引入的文件,发现文件没有被引用进来。

    实验二:

    打算将script引入文件的语句写成字符串,然后将字符串赋值给Vue组件内的元素的innerHTML里,发现项目报错,原因是innerHTML不允许写入script的内容,百度上说可以使用jquery来实现,试了一下一样不可以。百度一下Vue如何内容HTML,网上说用v-html里面放HTML,然后发现会报同样的错误。

    实验三:

    前面嵌入HTML文件的内容都失败了,就打算直接嵌入整个HTML文件。可以使用iframe实现内嵌HTML文件,如"<iframe frameborder=”no” style=”width:100%;height:500px;” src=”upload.html” ref=”iframe”></iframe>",将upload.html文件和内嵌它的Vue文件放在同一个额文件夹下,运行,界面<iframe>内显示"GET NO / upload.html",打开浏览器调试器发现,upload.html它的读取位置是项目的根目录下,修改src使浏览器可以读到upload.html对应的位置。

    项目打包发布:

    在项目打包发布到服务器的时候发现,使用iframe内嵌的HTML文件报错,由于个人对webpack不熟悉,不知道upload.html有没有打包进去。webpack打包HTML文件,在webpack.prod.conf.js文件中的webpackConfig的pulgins中添加

            发现webpack打包文件的时候,会把upload.html拎出来放打包下的static文件夹下的upload文件夹,发布服务器的时候发现upload.html照样没有显示出来,进入打包后的upload.html中,upload.html引用js找不到,js应该没有打包进来或者打包进来路径变了。使用important在HTML中引用js文件,打包后发布到服务器还是一样的问题。想着用requirejs去加载HTML,看能不能把HTML和HTML引用的js文件正确打包,由于可以参考内容过少,无从下手。

            不打包内嵌HTML了,把upload.html及引用文件放在一个文件夹下,加到webpack打包出来的dist的static文件夹下,将webpack中打包 调用upload.html路径的js调用路径内容改为在dist对应的路径,发布到服务器上文件终于可以使用了。(现在才想到可以配置webpack将upload.html及引用文件从打包出来)。

    后续:

            项目从vue-cli2升级到vue-cli3,之前用的方式不适用了。

            vue-cli3用iframe嵌入HTML,HTML要放在public的static文件夹下,在iframe的src调用中,直接写"static/upload.html"就可以了。相较于vue-cli2,内嵌的HTML打包后不用上面的笨办法了。

            在内嵌的HTML页面,要求与后端的通讯要带上token,试着用js-cookie插件获取当前vue里的token,存入sessionStorage,再在内嵌的HTML页面获取sessionStorage,在本地运行是可以的,打包给后端部署后,在内嵌的HTML获取sessionStorage的值是null,不知道为什么。

            后面就在与后端通讯的js里使用jquery-cookie获取token,这个插件是基于jquery的,在引入该文件要先引入jquery

            uploader.js的请求添加请求头参数

    vue.js获取到的数据中所含的html元素如何按html正常显示?

    new Vue({

        data:{

            my_html:'<a href="https://www.baidu.com">百度</a>'

        }

    })

    //使用v-html指令输出data中的html元素

    <div v-html="my_html"></div>

    哗驼汽车网还为您提供以下相关内容希望对您有帮助:

    如何利用Vue.js库中的v-html指令添加html元素

    1、新建html文档,然后在head标签中引入vue的js文件,这里以引入cdn文件为例:2、在body标签中添加一个id为“app”的div标签,然后在这个div标签中再添加一个div标签,在vue中添加一个变量数据,然后用“{{}}”符号将变量...

    如何利用Vue.js库中的v-html指令添加html元素

    js在特定位置动态添加html可以利用HTML DOM appendChild() 方法。例子:var div1 = document.createElement("div");div1.id = "div1";var div2 = document.createElement("div");div2.id ="div2";document.body.appe...

    如何利用Vue.js库中的v-html指令添加html元素

    第一步,创建静态页面vhtml.html,并引入vue.js文件 第二步,在&lt;body&gt;&lt;/body&gt;元素内插入两个div,一个作为外层div,另外一个作为子div,并在父div绑定v-html指令 第三步,绑定v-html指令数据,这里设置为字符串 第四...

    vue文件内嵌 HTML文件iframe用法

    1.首先在vue页面里面通过iframe 的形式引用 注意 ref的值和 name的值我这里保持一致了,接下来都会有用到。(注意src里面的路径要和项目的路径一致哦)例:this.srcurl=' http://192.168.0.0:9527/draw_PLS.html'2....

    用vue在页面上使用input输入两个数,实现求两个数之间的偶数和!并且输出...

    下面是一个简单的 Vue 示例代码,用于实现输入两个数并求偶数和的功能,并将结果输出到页面上:HTML 代码:html复制代码&lt;div id="app"&gt; &lt;label for="start"&gt;起始数值:&lt;/label&gt; &lt;input type="number" id="start" v...

    vue-cli2 组件内嵌HTML文件

    vue-cli3用iframe嵌入HTML,HTML要放在public的static文件夹下,在iframe的src调用中,直接写"static/upload.html"就可以了。相较于vue-cli2,内嵌的HTML打包后...

    vue中html2canvas的使用

    html2canvas: 将dom元素转为一张图片 1,装包: npm install --save html2canvas 2,导入: import html2canvas from 'html2canvas';3,如果该盒子里面有从后台请求回来的图片路径 可能会存在图片...

    vue.js获取到的数据中所含的html元素如何按html正常显示?

    new Vue({ data:{ my_html:'&lt;a href="https://www.baidu.com"&gt;百度&lt;/a&gt;' }})//使用v-html指令输出data中的html元素&lt;div v-html="my_html"&gt;&lt;/div&gt;

    vue 项目中如何获取 html 页面的数据?

    您可以使用Vue的v-html指令将HTML代码插入到组件的模板中,从而动态渲染HTML页面。如果您需要获取HTML页面的数据,可以使用axios库来完成ajax请求。如果您需要在另一个页面使用通过路由传参拿到跳转前页面数据并在页面使用传来的...

    Vue.js给html元素绑定标题

    3、在&lt;div&gt;&lt;/div&gt;标签下方插入&lt;script&gt;&lt;/script&gt;,并在这个标签初始化vue组件函数。4、保存代码并在浏览器中预览该界面,可以查看到浏览器控制台报错了。5、最后修改v-html指令和v-model指令绑定的数据变量,然后保存代码...

    Top