瀏覽代碼

还原视频禁用录屏

lex 1 年之前
父節點
當前提交
f50924cf75
共有 1 個文件被更改,包括 72 次插入2 次删除
  1. 72 2
      src/views/coursewarePlay/index.tsx

+ 72 - 2
src/views/coursewarePlay/index.tsx

@@ -8,7 +8,8 @@ import {
   ref,
   watch,
   Transition,
-  computed
+  computed,
+  onBeforeUnmount
 } from 'vue'
 import iconBack from './image/back.svg'
 import styles from './index.module.less'
@@ -16,7 +17,7 @@ import 'plyr/dist/plyr.css'
 import request from '@/helpers/request'
 import { state } from '@/state'
 import { useRoute } from 'vue-router'
-import { postMessage, promisefiyPostMessage } from '@/helpers/native-message'
+import { listenerMessage, postMessage, promisefiyPostMessage } from '@/helpers/native-message'
 import MusicScore from './component/musicScore'
 import iconDian from './image/icon-dian.svg'
 import iconPoint from './image/icon-point.svg'
@@ -249,6 +250,8 @@ export default defineComponent({
             type: 'fullscreen'
           }
         })
+        //检测是否录屏
+        handleLimitScreenRecord()
         setTimeout(() => {
           data.animationState = 'end'
         }, 500)
@@ -341,6 +344,49 @@ export default defineComponent({
       }
     }
 
+    // 切换播放
+    const togglePlay = (m: any, isPlay: boolean) => {
+      if (isPlay) {
+        m.videoEle?.play()
+      } else {
+        m.videoEle?.pause()
+      }
+    }
+
+    //录屏时间触发
+    const handleLimitScreenRecord = async () => {
+      const result = await promisefiyPostMessage({
+        api: 'getDeviceStatus',
+        content: { type: 'video' }
+      })
+      const { status } = result?.content || {}
+      if (status == '1') {
+        data.itemList.forEach((item: any) => (item.autoPlay = false))
+        handleStop()
+        showDialog({
+          title: '温馨提示',
+          message: '课件内容请勿录屏',
+          beforeClose: () => {
+            return new Promise((resolve) => {
+              promisefiyPostMessage({
+                api: 'getDeviceStatus',
+                content: { type: 'video' }
+              }).then((res: any) => {
+                console.log(res, 'res')
+                const content = res.content
+                if (content?.status == '1') {
+                  resolve(false)
+                } else {
+                  const activeItem = data.itemList[popupData.activeIndex]
+                  togglePlay(activeItem, true)
+                  resolve(true)
+                }
+              })
+            })
+          }
+        })
+      }
+    }
     onMounted(async () => {
       if (state.platformType === 'STUDENT') {
         await getLookVideoData()
@@ -364,6 +410,30 @@ export default defineComponent({
       }
       getCourseSchedule()
       window.addEventListener('message', iframeHandle)
+
+      //禁止录屏 ios
+      listenerMessage('setVideoPlayer', (result) => {
+        if (result?.content?.status == 'pause') {
+          handleLimitScreenRecord()
+        }
+      })
+
+      // 安卓
+      postMessage({
+        api: 'limitScreenRecord',
+        content: {
+          type: 1
+        }
+      })
+    })
+
+    onBeforeUnmount(() => {
+      postMessage({
+        api: 'limitScreenRecord',
+        content: {
+          type: 0
+        }
+      })
     })
 
     const playRef = ref()