方式一:利用系统剪切板实现跨iframe粘贴

以下行为,都可以将内容复制到系统剪切板中

  • 通过编辑器Copy()、Cut()接口
  • 通过编辑器 内置右键菜单-复制、剪切
  • 通过快捷键 ctrl+c / ctrl+x

通过ctrl+v即可实现跨iframe粘贴

方式二:使用内置UI右键菜单实现跨iframe粘贴

需应用配合实现相关功能

  • 即应用跨iframe传递了xmlStr、textStr从而实现了跨iframe粘贴

步骤一:应用监听”writeClipboard”事件,得到复制的内容xmlStr、textStr

  • 任何写入系统剪切板的形为都会产生”writeClipboard”事件

示例代码:

//监听
ThinkEditor.addEventListener("writeClipboard", this.OnWriteClipboard);

//取得复制的xmlStr、textStr
    OnWriteClipboard(e) {
      let eventBody = e.data;
      console.warn(eventBody);
      /************************
       * 应用自行将xml、text进行跨iframe管理
       * ********************/
      global.InnerPasteXmlStr = eventBody.data.xml;
      global.InnerPasteTextStr = eventBody.data.text;
      /**********************/
    }

步骤二:应用监听”innerPaste”事件,接管内置粘贴行为

  • 只在内置UI右键菜单-粘贴按钮被触发时,才会产生”innerPaste”事件

  • 使用应用系统中保存的xmlStr、textStr进行粘贴
  • 粘贴接口为ThinkEditor.InnerPaste()
  • 注意:OnInnerPaste()中如果应用成功接管处理[内部粘贴],那么返回值应当为false

示例代码

//监听
ThinkEditor.addEventListener("innerPaste", this.OnInnerPaste);

//进行粘贴
  OnInnerPaste(e) {
       let eventData = e.data;
       if(eventData.handle != "request")
       {
        return true;
       }
      /************************
       * 注意:只有通过内置右键菜单-粘贴,才会产生"InnerPaste"事件
       * ctrl+v 不会产生"InnerPaste"事件
       * 应用自行将xml、text进行跨iframe管理
       * ********************/
      let xmlStr=global.InnerPasteXmlStr;
      let textStr=global.InnerPasteTextStr;   

      let pasteType = eventData.data.pasteType;//含义详见E_PASTE_TYPE
      ThinkEditor.InnerPaste(pasteType, xmlStr , textStr);

       /************************
       * 注意:如果由应用接管了内部粘贴行为,则一定要返回false,表示编辑器内部的粘贴行为中止
       * 如果返回true,则会出现粘贴了两次的现象
       * ********************/
      return false;

    }
文档更新时间: 2025-04-23 21:35   作者:admin