idrawjs/idraw

通过iframe内嵌到不同域名中时,出现的错误

EasonMar opened this issue · 2 comments

一、问题场景
1、子页面引用了idrawjs、内嵌到父页面中
2、父子页面域名不同
3、screen-watcher 内的 _initParentEvent 方法用到了 window.top、window.parent 等api,此时因为同源策略,操作被block,报错
二、建议
是否可以 catch _initParentEvent 中的错误,当发现内嵌在iframe中但是不同域导致报错时,不再向上寻找顶层页面,代码如下(本地亲测有效,但不知道有无其他疏漏):
_initParentEvent() { let target = window; let targetOrigin = target.origin; try { while (target.self !== target.top) { // If in iframe if (target.self !== target.parent) { // If in same origin if (target.origin === targetOrigin) { target.parent.window.addEventListener( 'mousemove', this._listSameOriginParentWindow.bind(this), false); } } target = target.parent; if (!target) { break; } } } catch (error) { console.log(error) } }

以上。

@EasonMar 感谢您的指教,已经在 0.2.0-alpha.25 版本中 修复好了

@chenshenhai 感谢及时回应!