微前端环境中:
问题:
- wangEditor: 无奈批改,且无奈粘贴复制
- QuillEditor:无奈应用工具栏,随便点击后,控制台报错
对于wangEditor解决办法:
plugins: [ { jsBeforeLoaders: [ { content: `window.Selection = window.parent.Selection`, }, ], jsLoader: (code) => { return code .replace("n.isCollapsed", "n.baseOffset === n.focusOffset") .replace("n.collapsed", "n.startOffset === n.endOffset"); }, }, ],
具体原理:
- 子利用运行在 iframe内,dom在主利用的shadowdom中,入选中文字时,在主利用监听selectionchange,并且通过 document.getSelection()获取选中的selection,在wangEditor中 会判断这个 selection instanceof window.Selection,很显著主利用的selection 不可能是 iframe 外面window Selection的实例,所以罗唆将主利用的 Selection赋值给 iframe 的 Selection
- shadowDom 大坑,详见 stackoverflow,在shadowDom中 Selection.isCollapsed永远为true,相当于永远没有选中,所以只能批改 wangEditor 的代码,让读取 isCollapsed 批改成 baseOffset 和 focusOffset的比照,就晓得是否选中了文字了
留神:
n.isCollapsed 和 n.collapsed 相当于是做wangEditor 压缩代码的替换,具体代码在这个中央: