为了账号安全,请及时绑定邮箱和手机立即绑定

Rails vuejs 获取 iframe 元素的高度

Rails vuejs 获取 iframe 元素的高度

浮云间 2023-02-17 15:50:21
我正在使用vuejswebpackerrails和turbolinks. iframe我想在初始页面加载时计算元素的正确高度。目前,我在手动刷新页面时获取元素的高度,而当有人从任何其他页面导航到元素所在的页面时,不会iframe计算元素的高度。我的index.js设置:Vue.use(TurbolinksAdapter);document.addEventListener('turbolinks:load', () => {  const app = new Vue({    el: '[data-behaviour="vue"]',  });});我的preview.vue元素iframe所在的位置。data() {    return {      frameHeight: '',    };  },   computed: {    computeHeight() {      this.frameHeight =        this.$refs.iframe.contentWindow.document.body.scrollHeight + 'px';    },  },  mounted() {    window.addEventListener('load', () => {      this.computeHeight;    });  },我也尝试用mounted钩子替换created钩子,而不是监听事件load我也尝试监听turbolinks:load事件。但它不起作用。任何帮助,将不胜感激。谢谢。
查看完整描述

2 回答

?
郎朗坤

TA贡献1921条经验 获得超9个赞

尝试像这样在 nextTick 中包装计算高度代码:


data() {

    return {

      frameHeight: '',

    };

  },

  mounted() {

    this.$nextTick(() => { 

      window.addEventListener('load', () => {

        this.frameHeight =

          this.$refs.iframe.contentWindow.document.body.scrollHeight + 'px';

      });

    })

  },

这应该允许元素在执行代码以获取高度之前加载。


查看完整回答
反对 回复 2023-02-17
?
哔哔one

TA贡献1854条经验 获得超8个赞

使用 nextTick 时不需要 eventListener。你可以这样做:


data() {

    return {

      frameHeight: '',

    };

  },

  mounted() {

    this.$nextTick(() => { 

      this.frameHeight = 

          this.$refs.iframe.contentWindow.document.body.scrollHeight + 'px';

    });


  },


查看完整回答
反对 回复 2023-02-17
  • 2 回答
  • 0 关注
  • 167 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信