在vue中实现嵌套页面(iframe)


Posted in Javascript onJuly 30, 2020

vue中嵌套iframe,将要嵌套的文件放在static下面。src可以使用相对路径,也可使用服务器根路径http:localhost:8088/…

<iframe src="../../static/plusPro.html" width="1200" height="300" frameborder="0" scrolling="auto"style="position:absolute;top: -300px;left: 0px;"></iframe>

补充知识:关于VUE嵌套iframe的一系列问题

此文是建立在vue-cli之上 ,当然单写也可以,下文会涉及一些关于cli的知识,单写的请忽略;

最近有很多小伙伴问超哥关于vue中嵌套iframe一些问题。

犹豫本尊最近转型了react,关于vue的问题以后会在csdn发表博客。

废话不多说,直接进入正题;

本尊并不建议vue嵌套iframe,当然会有那些个比较恶心的需求,例如在读的小伙伴。

申明:本尊在iframe页面写入的是JQ,因为和VUE没有特别大的牵连,所以直接操作dom了,如果有同学依然想在iframe页面中也是可以的,只需把本尊的代码copy copy copy,然后在改吧改吧就OK了。

问题 1 (go back)

例如:在iframe页面中有诸多跳转,当完成玩iframe页面中一些操作时,此时点击浏览器的回退功能,那么恭喜你中奖了,你回退的是iframe页面,并无法回退和iframe无关联的vue页面,一直点击浏览器的回退,可能会一直重复iframe连接的几个页面,或直接404,或空白。

解决办法:使用H5的history对象。

code:

$(document).ready(function(e) { 
    var counter = 0;
    if (window.history && window.history.pushState) {
       $(window).on('popstate', function () {
            window.history.pushState('forward', null, '#');
            window.history.forward(1);
            window.parent.location.hash='/newActivity';//这里写你自己要回退的路径
        });
     }
 
     window.history.pushState('forward', null, '#'); //在IE中必须得有这两行
     window.history.forward(1);
  });

介绍:

popstate:每当同一个文档的浏览历史(即history对象)出现变化时,就会触发popstate事件。

forward:移动到下一个访问页面,等同于浏览器的前进键。

其他的没啥了吧,相信大家也都能看懂,其实只需copy copy copy;

问题 2 (iframe中的请求);

关于请求其实没啥要说的,但是还是有人会问,既然问了那就顺便说一下吧。

例如:有一个活动详情页面iframe,活动 列表是vue层,点击活动列表某一项跳详情,此时请求接口,地址栏带参数,像这种页面一般在iframe页面请求的接口中,最主要的参数就是活动ID,当然不排除你们公司有个奇葩后台,或者刚从某培训机构培训出来的所谓大牛,以此类推,参数继续带过来。

code:

function PcCommon(){
 this.baseUrl='https://xxxxxxx';这里写你的基址路径
}
PcCommon.prototype={
 GetQueryString: function(name) {
 return decodeURIComponent((new RegExp('[?|&]'+name+'='+'([^&;]+?)(&|#|;|$)').exec(location.href)||[,""])[1].replace(/\+/g,'%20'))||null;
 },//获取地址栏参数
 ajaxPost:function(){
 $.ajax({
  url:this.baseUrl+url+signParam(),
  type:'POST',
  async:true,
  data:JSON.stringify(data),
  dataType:'json',
  headers:{
  "Authorization":getCookie('token'),
  "Content-Type":"application/json;charset=UTF-8"
  },
  success:function(res){
  if(typeof success == 'function'){
   success(res)
  } 
  }
 })
 },//二次分装ajax
 goTop:function(id){
 var num = $('.'+id).offset().top+125+'px';
 $('html,body', window.parent.document).animate({scrollTop: num }, 500);
 }//分装的滚动,白送
}

这是本尊写的一个简单的base.js就是原生的面向对象。

写到基址路径的时候这里还真有必要说一下这个请求。

首先vue打包的时候并不会把iframe中的html打包进去,所以当初你在main.js中设置的那些基址以及common是不能用的,所以base.js才产生了基址路径,当然你准备部署的时候一定要记得改掉你的基址路径,建议,最好写两个,一个注释,一个打开,也挺方便,一目了然;

接下来是调用,上代码;

code:

var newHd=new PcCommon();
 var actStage=newHd.GetQueryString('actStage');//获取iframe地址栏参数实例
 var actId=newHd.GetQueryString('actId');//获取活动ID
 newHd.baseUrl = 'http://192.168.0.13:7500/';//更改你的基址路径,上线的时候直接注释掉就OK
 
$('.confirm_simne_btn').on('click',function(){
 var that=this;
 newHd.ajaxPost(
  '/activity/v1/invitation/claimPrize',
  {
  activityId:actId,
  prizeLevel:id
  },
  function(res){
  console.log(res)
        //直接写你的操作就OK
  }
 )
 })

就个简单的ajax请求,真没啥要说,不过刚刚在写文的过程中又想起一些知识点,继续下文。

问题 3(由问题2引发===>关于目录)

npm run build 相信这条命令是干啥的大家都清楚,会生成一个dist文件,在这里我不批判他人,只说我的做法;

例如:还是拿活动举例,活动列表下有诸多个不同的template,犹豫打包并不会把iframe文件打包进去,所以我直接把他放在dist文件下,发布的时候直接打包dist。

直接上图:

在vue中实现嵌套页面(iframe)

简单的介绍一下,dist不用多说了,static以及index.html也不用说了,最主要的看newAct这个夹子,这个夹子就是你们所谓的活动夹子,里面有public和view,public主要放的一些公共的css、js、以及第三方包。view里面就是各个活动的夹子,例如duyuesheng这个夹子,就和你正常写H5一样,里面 有js、css,这些你们就随意发挥吧。

就先介绍到这里?

还有在iframe中操作vue的方法,在firame中跳转到vue指定的路径....问题有很多,也不是一句两句能说清楚的,关键没个很好的例子给大家演示,就这样吧,有不懂的可以留言或者私密我....

此文写给那些需要的人看,不喜勿喷!!希望能给大家一个参考,也希望大家多多支持三水点靠木!

Javascript 相关文章推荐
优化 JavaScript 代码的方法小结
Jul 16 Javascript
JavaScript常用对象的方法和属性小结
Jan 24 Javascript
JavaScript中圆括号()和方括号[]的特殊用法疑问解答
Aug 06 Javascript
jquery+json实现数据列表分页示例代码
Nov 15 Javascript
JavaScript cookie的设置获取删除详解
Feb 11 Javascript
JavaScript把数组作为堆栈使用的方法
Mar 20 Javascript
微信小程序 后台https域名绑定和免费的https证书申请详解
Nov 10 Javascript
node.js中express中间件body-parser的介绍与用法详解
May 23 Javascript
Node.js如何使用Diffie-Hellman密钥交换算法详解
Sep 05 Javascript
jQuery代码优化方法总结
Jan 29 jQuery
vue仿淘宝滑动验证码功能(样式模仿)
Dec 10 Javascript
Vue如何跨组件传递Slot的实现
Dec 14 Vue.js
Vue文本模糊匹配功能如何实现
Jul 30 #Javascript
VUE 单页面使用 echart 窗口变化时的用法
Jul 30 #Javascript
解决vue单页面多个组件嵌套监听浏览器窗口变化问题
Jul 30 #Javascript
Vue Render函数原理及代码实例解析
Jul 30 #Javascript
vue - props 声明数组和对象操作
Jul 30 #Javascript
vue项目,代码提交至码云,iconfont的用法说明
Jul 30 #Javascript
vue如何使用外部特殊字体的操作
Jul 30 #Javascript
You might like
叶罗丽:为什么大家对颜冰这对CP非常关心,却对金茉两人十分冷漠
2020/03/17 国漫
php 获取一个月第一天与最后一天的代码
2010/05/16 PHP
浅谈php扩展imagick
2014/06/02 PHP
thinkPHP交易详情查询功能详解
2016/12/02 PHP
js 输出内容到新窗口具体实现代码
2013/05/31 Javascript
jquery中prop()方法和attr()方法的区别浅析
2013/09/06 Javascript
实现图片预加载的三大方法及优缺点分析
2014/11/19 Javascript
Javascript 高阶函数使用介绍
2015/06/15 Javascript
js面向对象之常见创建对象的几种方式(工厂模式、构造函数模式、原型模式)
2015/11/09 Javascript
JS延时提示框实现方法详解
2015/11/26 Javascript
用jmSlip编写移动端顶部日历选择控件
2016/10/24 Javascript
在 Angular 中使用Chart.js 和 ng2-charts的示例代码
2017/08/17 Javascript
利用HBuilder打包前端开发webapp为apk的方法
2017/11/13 Javascript
js 两数组去除重复数值的实例
2017/12/06 Javascript
vue 项目中使用Loading组件的示例代码
2018/08/31 Javascript
vue解决使用webpack打包后keep-alive不生效的方法
2018/09/01 Javascript
javascript for循环性能测试示例
2019/08/07 Javascript
详解JavaScript 事件流
2020/09/02 Javascript
解决nuxt页面中mounted、created、watch执行两遍的问题
2020/11/05 Javascript
easy_install python包安装管理工具介绍
2013/02/10 Python
Python挑选文件夹里宽大于300图片的方法
2015/03/05 Python
Python中的super()方法使用简介
2015/08/14 Python
人机交互程序 python实现人机对话
2017/11/14 Python
Python 25行代码实现的RSA算法详解
2018/04/10 Python
基于python的itchat库实现微信聊天机器人(推荐)
2019/10/29 Python
使用pytorch 筛选出一定范围的值
2020/06/28 Python
详解python tkinter包获取本地绝对路径(以获取图片并展示)
2020/09/04 Python
html5中canvas学习笔记1-画板的尺寸与实际显示尺寸
2013/01/06 HTML / CSS
DOUGLAS波兰:在线销售香水和化妆品
2020/07/05 全球购物
如何利用cmp命令比较文件
2016/04/11 面试题
一些关于MySql加速和优化的面试题
2014/01/30 面试题
学习委员自我鉴定
2014/01/13 职场文书
高三学习决心书
2014/03/11 职场文书
学生会竞选演讲稿纪检部
2014/08/25 职场文书
2016年社区服务活动总结
2016/04/06 职场文书
logback如何自定义日志存储
2021/08/30 Java/Android