找回密码
 立即注册

QQ登录

只需一步,快速开始

阳光多灿烂

初级会员

11

主题

29

帖子

323

积分

初级会员

积分
323
阳光多灿烂
初级会员   /  发表于:2019-12-6 10:57  /   查看:4353  /  回复:6
在vue单页面中嵌套iframe,为什么有时候可以获取到spread对象有时候不行?
]K1~TFY9@`V`ITXVZ1F5HVK.png
J@_(5V~4$99U`ZXXN(BJ4$N.png
I1[86TI1[3QTW6TLN18EY0M.png
]K1~TFY9@`V`ITXVZ1F5HVK.png

6 个回复

倒序浏览
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2019-12-6 14:40:03
沙发
您好,这种情况通常是由于加载时间差造成,

在iframe.onload中获取workbook实例,可能在执行到findControl时,workbook还没有初始化,这就导致findControl拿不到。

要验证这个猜测,可以把这句代码放到setTimeout中试试。
回复 使用道具 举报
阳光多灿烂
初级会员   /  发表于:2019-12-6 17:12:32
板凳
KevinChen 发表于 2019-12-6 14:40
您好,这种情况通常是由于加载时间差造成,

在iframe.onload中获取workbook实例,可能在执行到findContr ...

在setimeout是可以的,但是得设置1s以上,加载会比较慢。
回复 使用道具 举报
阳光多灿烂
初级会员   /  发表于:2019-12-6 17:14:38
地板
阳光多灿烂 发表于 2019-12-6 17:12
在setimeout是可以的,但是得设置1s以上,加载会比较慢。

而且获取dom也必须放在里面,不然有时候获取dom也会获取不到
回复 使用道具 举报
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2019-12-9 09:53:58
6#
本帖最后由 KevinChen 于 2019-12-9 09:59 编辑
阳光多灿烂 发表于 2019-12-6 17:14
而且获取dom也必须放在里面,不然有时候获取dom也会获取不到

目前已经可以确认,获取不到workbook实例实际上是由于加载时差的原因造成的了。

SpreadJS的在线表格编辑器加载确实是需要一个过程,不过它也提供了一个加载完成事件,

可以在src/index/index.js中看到它的调用:

  1. designer.loader.ready(function () {
  2.         //To Fix the designer resize performance issues.
  3.         $(window).unbind("resize.gcuiribbon");
  4.         $("#verticalSplitter").show();
  5.         updateLayout();
  6.     });
复制代码


你可以在这个designer.loader.ready中可以加入一些调用父层页面的方法,

以此来将SpreadJS的workbook实例赋值给父层页面。

还有一些你可能用得到的代码,我贴在这里:

  1. //获取Designer实例:
  2. var designer = GC.Spread.Sheets.Designer;
  3. //通过designer获取workbook:
  4. var spread = designer.wrapper.spread;
复制代码



回复 使用道具 举报
阳光多灿烂
初级会员   /  发表于:2019-12-26 16:57:53
7#
KevinChen 发表于 2019-12-9 09:53
目前已经可以确认,获取不到workbook实例实际上是由于加载时差的原因造成的了。

SpreadJS的在线表格编 ...

designer.loader.ready  这个事件有时候触发不了,为什么啊?
回复 使用道具 举报
Fiooona
论坛元老   /  发表于:2019-12-26 19:04:21
8#
需要有具体的Demo才能跟踪问题,可以发个能重现问题的包,发到我们售后邮箱 support组
组件化表格编辑器(预览版)试用进行中,点击了解详情!
请点击评分,对我的服务做出评价!5分为非常满意!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部