在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下判断一个对象是否具有指定名称的属性的的代码
Jan 11 Javascript
如何通过javascript操作web控件的自定义属性
Nov 25 Javascript
JavaScript中的值类型详细介绍
Dec 29 Javascript
jQuery中的ajax async同步和异步详解
Sep 29 Javascript
JS实现常见的TAB、弹出层效果(TAB标签,斑马线,遮罩层等)
Oct 08 Javascript
灵活的理解JavaScript中的this指向
Feb 25 Javascript
jQuery插件DataTables分页开发心得体会
Aug 22 jQuery
JavaScript+CSS相册特效实例代码
Sep 07 Javascript
基于jquery trigger函数无法触发a标签的两种解决方法
Jan 06 jQuery
Angular(5.2-&gt;6.1)升级小结
Dec 27 Javascript
vue实现表单未编辑或未保存离开弹窗提示功能
Apr 08 Javascript
vue实现图片上传功能
May 28 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书写安全的脚本代码
2012/02/05 PHP
PHP中redis的用法深入解析
2014/02/20 PHP
destoon整合ucenter后注册页面不跳转的解决方法
2014/06/21 PHP
php调用新浪短链接API的方法
2014/11/08 PHP
PHP获取一年中每个星期的开始和结束日期的方法
2015/02/12 PHP
PHP get_html_translation_table()函数用法讲解
2019/02/16 PHP
namespace.js Javascript的命名空间库
2011/10/11 Javascript
通过上下左右键和回车键切换光标实现代码
2013/03/08 Javascript
浅析offsetLeft,Left,clientLeft之间的区别
2013/11/30 Javascript
8个超实用的jQuery功能代码分享
2015/01/08 Javascript
javascript实现根据函数名称字符串动态执行函数的方法示例
2016/12/28 Javascript
原生JS实现自定义滚动条效果
2020/10/27 Javascript
Vue拖拽组件开发实例详解
2018/05/11 Javascript
vue中v-model的应用及使用详解
2018/06/27 Javascript
Node.js log4js日志管理详解
2018/07/31 Javascript
javascript 对象 与 prototype 原型用法实例分析
2019/11/11 Javascript
Vue axios与Go Frame后端框架的Options请求跨域问题详解
2020/03/03 Javascript
vue 使用post/get 下载导出文件操作
2020/08/07 Javascript
JS实现可以用键盘方向键控制的动画
2020/12/11 Javascript
python获取文件路径、文件名、后缀名的实例
2018/04/23 Python
Python unittest模块用法实例分析
2018/05/25 Python
用Python逐行分析文件方法
2019/01/28 Python
python2.7使用plotly绘制本地散点图和折线图
2019/04/02 Python
Python原始套接字编程实例解析
2020/01/29 Python
python 伯努利分布详解
2020/02/25 Python
Python 数据的累加与统计的示例代码
2020/08/03 Python
matplotlib基础绘图命令之errorbar的使用
2020/08/13 Python
简单了解python关键字global nonlocal区别
2020/09/21 Python
python修改微信和支付宝步数的示例代码
2020/10/12 Python
HTML5 在canvas中绘制文本附效果图
2014/06/23 HTML / CSS
意大利领先的奢侈品在线时装零售商:MCLABELS
2020/10/13 全球购物
万代美国官网:PREMIUM BANDAI USA
2020/09/11 全球购物
文秘专业毕业生就业推荐信
2013/11/08 职场文书
个人授权委托书
2014/04/03 职场文书
民警忠诚教育心得体会
2016/01/23 职场文书
nginx网站服务如何配置防盗链(推荐)
2021/03/31 Servers