SanHQin 1 day ago
parent
commit
58a2cd7cea

+ 1 - 1
dist/index.html

@@ -32,7 +32,7 @@
     html,
     html,
     body{
     body{
       font-family: '黑体';
       font-family: '黑体';
-    }</style><link href=./static/css/app.d53c2a296820a76b84fd4a28c7f618a0.css rel=stylesheet></head><body><div id=app></div><script type=text/javascript src=./static/js/manifest.3ad1d5771e9b13dbdad2.js></script><script type=text/javascript src=./static/js/vendor.becc9317549795ada446.js></script><script type=text/javascript src=./static/js/app.8d1851aa4b0b3cae00b9.js></script></body></html><script>function stopSafari() {
+    }</style><link href=./static/css/app.3c9f12166a90643c57c499fb6f4e36c1.css rel=stylesheet></head><body><div id=app></div><script type=text/javascript src=./static/js/manifest.3ad1d5771e9b13dbdad2.js></script><script type=text/javascript src=./static/js/vendor.becc9317549795ada446.js></script><script type=text/javascript src=./static/js/app.7339cdf41a5072f02476.js></script></body></html><script>function stopSafari() {
     //阻止safari浏览器双击放大功能
     //阻止safari浏览器双击放大功能
     let lastTouchEnd = 0  //更新手指弹起的时间
     let lastTouchEnd = 0  //更新手指弹起的时间
     document.documentElement.addEventListener("touchstart", function (event) {
     document.documentElement.addEventListener("touchstart", function (event) {

File diff suppressed because it is too large
+ 0 - 0
dist/static/css/app.3c9f12166a90643c57c499fb6f4e36c1.css


File diff suppressed because it is too large
+ 0 - 0
dist/static/css/app.3c9f12166a90643c57c499fb6f4e36c1.css.map


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/app.7339cdf41a5072f02476.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/app.7339cdf41a5072f02476.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/manifest.3ad1d5771e9b13dbdad2.js.map


+ 79 - 31
src/components/pptEasyClass/index.vue

@@ -387,47 +387,95 @@ export default {
       // this.showObserveDialog = true;
       // this.showObserveDialog = true;
 
 
       const url = `https://observe.cocorobo.cn/#/newClassroom?userid=${this.userid}&oid=${this.oid}&org=${this.org}&pptid=${pptid}`;
       const url = `https://observe.cocorobo.cn/#/newClassroom?userid=${this.userid}&oid=${this.oid}&org=${this.org}&pptid=${pptid}`;
+
       const _pageWindow = window.open(url, '_blank');
       const _pageWindow = window.open(url, '_blank');
 
 
-      // 优化:仅通过轮询方式检查窗口是否加载完成并发送消息,被打开页面无需做任何处理
-      const sendFileData = () => {
-        if (_pageWindow && !_pageWindow.closed) {
-          _pageWindow.postMessage(
-            {
-              type: 'fileData',
-              file,
-            },
-            '*'
-          );
-        }
+      // if(!_pageWindow){
+      //   alert('浏览器弹窗被拦截,请允许弹窗后重试');
+      //   return;
+      // }
+      const sendData = {
+        type: 'fileData',
+        file,
+      }
+      const sendMessageToVue3 = () => {
+        _pageWindow.postMessage(
+          sendData,
+          '*' // targetOrigin:必须是Vue3的实际域名,不要用*(安全)
+        );
       };
       };
 
 
-      let checkCount = 0;
-      const checkLoadedInterval = setInterval(() => {
-        if (!_pageWindow || _pageWindow.closed) {
-          clearInterval(checkLoadedInterval);
-          return;
-        }
-        try {
-          if (_pageWindow.document && _pageWindow.document.readyState === 'complete') {
-            clearInterval(checkLoadedInterval);
-            sendFileData();
-          }
-        } catch (err) {
-          // 跨域下直接尝试发送
-          clearInterval(checkLoadedInterval);
-          sendFileData();
+      const handleVue3Ready = (e) => {
+        // 校验消息来源(安全:只处理Vue3域名的消息)
+
+        // 校验消息类型(确认是Vue3的就绪通知)
+        if (e.data.type === 'READY') {
+          console.log('已就绪,开始发送数据');
+          sendMessageToVue3();
         }
         }
-        if (++checkCount > 20) {
-          // 最多检测2秒(20次)
-          clearInterval(checkLoadedInterval);
-          sendFileData();
+
+        // 校验Vue3的"接收成功"确认(可选,进一步确保送达)
+        if (e.data.type === 'DATA_RECEIVED') {
+          console.log('数据已被接收');
+          // 收到确认后移除监听,避免内存泄漏
+          window.removeEventListener('message', handleVue3Ready);
         }
         }
-      }, 100);
+      };
+      window.addEventListener('message', handleVue3Ready);
+      const timeoutTimer = setTimeout(() => {
+        console.log('未收到就绪通知,主动发送数据');
+        sendMessageToVue3();
+        // 移除监听(兜底后清理)
+        window.removeEventListener('message', handleVue3Ready);
+      }, 5000);
+
+      const checkWinClosed = setInterval(() => {
+      if (_pageWindow.closed) {
+        clearTimeout(timeoutTimer);
+        clearInterval(checkWinClosed);
+        window.removeEventListener('message', handleVue3Ready);
+      }
+    }, 1000);
+      // 优化:仅通过轮询方式检查窗口是否加载完成并发送消息,被打开页面无需做任何处理
+      // const sendFileData = () => {
+      //   if (_pageWindow && !_pageWindow.closed) {
+      //     _pageWindow.postMessage(
+      //       {
+      //         type: 'fileData',
+      //         file,
+      //       },
+      //       '*'
+      //     );
+      //   }
+      // };
+
+      // let checkCount = 0;
+      // const checkLoadedInterval = setInterval(() => {
+      //   if (!_pageWindow || _pageWindow.closed) {
+      //     clearInterval(checkLoadedInterval);
+      //     return;
+      //   }
+      //   try {
+      //     if (_pageWindow.document && _pageWindow.document.readyState === 'complete') {
+      //       clearInterval(checkLoadedInterval);
+      //       sendFileData();
+      //     }
+      //   } catch (err) {
+      //     // 跨域下直接尝试发送
+      //     clearInterval(checkLoadedInterval);
+      //     sendFileData();
+      //   }
+      //   if (++checkCount > 20) {
+      //     // 最多检测2秒(20次)
+      //     clearInterval(checkLoadedInterval);
+      //     sendFileData();
+      //   }
+      // }, 100);
 
 
       setTimeout(()=>{
       setTimeout(()=>{
         window.focus()
         window.focus()
       },100)
       },100)
+
       function openPageWindow(){
       function openPageWindow(){
         _pageWindow.focus()
         _pageWindow.focus()
       }
       }

Some files were not shown because too many files changed in this diff