博客
关于我
vue嵌套iframe问题
阅读量:620 次
发布时间:2019-03-12

本文共 1828 字,大约阅读时间需要 6 分钟。

在项目中引用另一个项目时,选择使用iframe是一种有效的解决方案。在实际操作中,可能会遇到一些挑战,需要仔细分析并采取相应的解决措施。以下是针对遇到的问题的详细分析和解决方法。

1. router.go()失效问题

当多次修改iframe的src属性后,调用router.go(-1)时,发现无法实现路由后退,而是将iframe当作一个独立的窗口文档,未能正确更改父级项目的路由功能。这是因为改变src属性会导致路由状态混乱。

解决方法:

不通过改变iframe的src属性值来访问具体内容,而是使用window.location.replace(url)来替换iframe的内容。通过Vue项目的ref引用iframe,并在mounted生命周期钩子中添加load事件监听器:

this.$refs.iframe.contentWindow.location.replace(val);

这样可以确保路由的正常操作,不会干扰父级项目的路由状态。

2. 在iframe内的图片设置宽高问题

为了在iframe内的图片中设置宽度和高度,需要访问iframe的内容窗口并对img标签进行操作。

步骤:

  • 通过document.getElementById找到指定的iframe元素。
  • 获取iframe的contentWindow对象。
  • iframe加载完成后,访问contentWindow.document
  • 使用getElementsByTagName('img')找到第一个img元素。
  • 根据iframe的宽度和高度调整img的尺寸:
  • let iframe = document.getElementById("preview");let iwindow = iframe.contentWindow;iframe.addEventListener('load', function () {    let idoc = iwindow.document;    let img = idoc.getElementsByTagName('img')[0];    if (img) {        if (img.width >= img.height) {            img.width = iframe.clientWidth;            let top = (iframe.clientHeight - img.height) / 2;            img.style.marginTop = top + "px";        } else {            img.height = iframe.clientHeight;            let left = (iframe.clientWidth - img.width) / 2;            img.style.marginLeft = left + "px";        }    }});

    注意事项:

    • clientWidthclientHeight包括了border的宽度,需谨慎使用。
    • marginTopmarginLeft用于设置布局,确保图片居中显示。

    3. 控制台调试建议

    为了验证代码的正确性,可以在控制台中输出相关信息:

    // console.log("window", iwindow);// console.log("document", idoc);// console.log("html", idoc.documentElement);// console.log("head", idoc.head);// console.log("body", idoc.body);// console.log("img", idoc.getElementsByTagName('img')[0]);// console.log("iframeWidth", iframe.clientWidth);// console.log("imgWidth", idoc.body.getElementsByTagName('img')[0]);

    通过以上方法,可以确保iframe内的图片正确显示,并且不会干扰父级项目的路由功能。

    在实际应用中,根据具体项目需求调整代码,确保各项布局和功能的正常运行。

    转载地址:http://flrxz.baihongyu.com/

    你可能感兴趣的文章
    Operation not supported on read-only collection 的解决方法 - [Windows Phone开发技巧系列1]
    查看>>
    OperationResult
    查看>>
    Operations Manager 2007 R2系列之仪表板(多)视图
    查看>>
    operator new and delete
    查看>>
    operator new 与 operator delete
    查看>>
    operator() error
    查看>>
    OPPO K3在哪里打开USB调试模式的完美方法
    查看>>
    oppo后端16连问
    查看>>
    OPPO软件商店APP侵权投诉流程
    查看>>
    Optional用法与争议点
    查看>>
    Optional类:避免NullPointerException
    查看>>
    Optional讲解
    查看>>
    ORA-00069: cannot acquire lock
    查看>>
    ORA-00923: 未找到要求的 FROM 关键字
    查看>>
    ORA-00932: inconsistent datatypes: expected - got NCLOB【ORA-00932: 数据类型不一致: 应为 -, 但却获得 NCLOB 】【解决办法】
    查看>>
    ORA-00942 表或视图不存在
    查看>>
    ORA-01034: ORACLE not available
    查看>>
    ORA-01152: 文件 1 没有从过旧的备份中还原
    查看>>
    ORA-01207:文件比控制文件更新 - 旧的控制文件
    查看>>
    ORA-01795: 列表中的最大表达式数为 1000
    查看>>