在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 js cookie的存储,获取和删除
Dec 29 Javascript
node.js中的fs.renameSync方法使用说明
Dec 16 Javascript
js中setTimeout()与clearTimeout()用法实例浅析
May 12 Javascript
JavaScript中的Promise使用详解
Jun 24 Javascript
jQuery实现的淡入淡出二级菜单效果代码
Sep 15 Javascript
JavaScript中关联原型链属性特性
Feb 13 Javascript
react.js 获取真实的DOM节点实例(必看)
Apr 17 Javascript
js实现QQ面板拖拽效果(慕课网DOM事件探秘)(全)
Sep 19 Javascript
JavaScript实现表单注册、表单验证、运算符功能
Oct 15 Javascript
Layui 动态禁止select下拉的例子
Sep 03 Javascript
layui点击数据表格添加或删除一行的例子
Sep 12 Javascript
创建与框架无关的JavaScript插件
Dec 01 Javascript
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
PHP时间格式控制符对照表分享
2013/07/23 PHP
yii gridview实现时间段筛选功能
2017/08/15 PHP
jQuery(1.3.2) 7行代码搞定跟随屏幕滚动的层
2009/05/21 Javascript
一段实现页面上的图片延时加载的js代码
2010/02/11 Javascript
JSONP 跨域访问代理API-yahooapis实现代码
2012/12/02 Javascript
JQuery调webservice实现邮箱验证(检测是否可用)
2013/05/21 Javascript
jquery实现的随机多彩tag标签随机颜色和字号大小效果
2014/03/27 Javascript
jqGrid读取选择的多行的某个属性代码
2014/05/18 Javascript
Jquery搜索父元素操作方法
2015/02/10 Javascript
JS实现的4种数字千位符格式化方法分享
2015/03/02 Javascript
简单的js表格操作
2016/09/24 Javascript
bootstrap读书笔记之CSS组件(上)
2016/10/17 Javascript
JS常见创建类的方法小结【工厂方式,构造器方式,原型方式,联合方式等】
2017/04/01 Javascript
浅谈super-vuex使用体验
2018/06/25 Javascript
Node使用Nodemailer发送邮件的方法实现
2020/02/24 Javascript
12 种使用Vue 的最佳做法
2020/03/30 Javascript
vue大型项目之分模块运行/打包的实现
2020/09/21 Javascript
python中将阿拉伯数字转换成中文的实现代码
2011/05/19 Python
Python入门篇之列表和元组
2014/10/17 Python
Python中的rjust()方法使用详解
2015/05/19 Python
利用Python生成文件md5校验值函数的方法
2017/01/10 Python
基于Python对象引用、可变性和垃圾回收详解
2017/08/21 Python
python实现求解列表中元素的排列和组合问题
2018/03/15 Python
Python对象中__del__方法起作用的条件详解
2018/11/01 Python
WxPython建立批量录入框窗口
2019/02/27 Python
Django中modelform组件实例用法总结
2020/02/10 Python
pyqt5实现井字棋的示例代码
2020/12/07 Python
selenium+headless chrome爬虫的实现示例
2021/01/08 Python
美国照明、家居装饰和家具购物网站:Bellacor
2017/09/20 全球购物
linux面试题参考答案(2)
2015/12/06 面试题
工业设计专业个人求职信范文
2013/12/28 职场文书
小学新学期教师寄语
2014/01/18 职场文书
小学英语教学反思
2014/01/30 职场文书
庆七一晚会主持词
2015/06/30 职场文书
金榜题名主持词
2015/07/02 职场文书
OpenCV全景图像拼接的实现示例
2021/06/05 Python