您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
To learn more faster and efficiently
当前为
// ==UserScript== // @name Focus always and replay if video is paused // @name:zh-TW 始終保持焦點並在視頻暫停時自動播放 // @namespace http://tampermonkey.net/ // @version 0.3.4 // @description To learn more faster and efficiently // @description:zh-tw 此腳本旨在提高在線學習效率,透過自動保持視頻播放視窗的焦點並在視頻暫停時自動重播。適用於 `https://iedu.foxconn.com/*` 網站,能夠確保學習過程中視頻連續播放,無需手動干預,特別適合忙碌且希望提高學習效率的用戶。 // @author pjiaquan // @match https://iedu.foxconn.com/public/user/* // @match https://iedu.foxconn.com/public/play/* // @run-at document-start // @icon data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw== // @grant none // @license MIT // ==/UserScript== (function() { 'use strict'; window.onblur = null; window.blurred = false; let playingVideoTitle = ""; document.hasFocus = () => true; window.onFocus = () => true; [ "hidden", "mozHidden", "msHidden", "webkitHidden" ].forEach(prop_name => { Object.defineProperty(document, prop_name, {value: false}); }); Object.defineProperty(document, "visibilityState", {get: () => "visible"}); Object.defineProperty(document, "webkitVisibilityState", {get: () => "visible"}); document.onvisibilitychange = undefined; var event_handler = (event) => { if (["blur", "mouseleave", "mouseout"].includes(event.type) && (event.target instanceof HTMLInputElement || event.target instanceof HTMLAnchorElement || event.target instanceof HTMLSpanElement)) { return; // exclude input, anchor, and span elements } event.preventDefault(); event.stopPropagation(); event.stopImmediatePropagation(); }; [ "visibilitychange", "webkitvisibilitychange", "blur", "hasFocus", "mouseleave", "mouseout", "mozvisibilitychange", "msvisibilitychange" ].forEach(event_name => { window.addEventListener(event_name, event_handler, true); document.addEventListener(event_name, event_handler, true); }); let videoData = { filename: null, waresMap: new Map() }; // script1 functionality function updateVideoProgress() { // console.log('Check is playing or not'); if (window.wares && window.wares.length > 0) { // console.log("wares array found and not empty:", window.wares); setTimeout(() => { if (!isVideoPlaying()) { console.log('start!'); startPlayingVideo(); } else { // stopPlayingVideo(); } }, 5000); } else { console.log("wares array not found or is empty"); } } function setupVideoCheck() { //console.log('Page loaded, running script'); setInterval(updateVideoProgress, 5000); // Create and style the button // const button = document.createElement('button'); // button.textContent = 'Change Start Time'; // button.style.position = 'fixed'; // button.style.right = '20px'; // button.style.bottom = '20px'; // button.style.padding = '10px 20px'; // button.style.backgroundColor = '#007bff'; // button.style.color = '#fff'; // button.style.border = 'none'; // button.style.borderRadius = '5px'; // button.style.cursor = 'pointer'; // // Add click event listener to the button // button.addEventListener('click', changeStartTime); // // Append the button to the body // document.body.appendChild(button); // // Select the active dd element // const activeElement = document.querySelector('dl .active'); // // Check if the active element exists and log its title attribute or inner text // if (activeElement) { // // console.log('Active element found:', activeElement); // // console.log('Title:', activeElement.getAttribute('title')); // playingVideoTitle = activeElement.getAttribute('title'); // // console.log('Content:', activeElement.innerText); // } else { // console.log('No active element found'); // } } function isVideoPlaying() { var videoElement = document.getElementById('realvideo_html5_api'); if (videoElement && videoElement.tagName === 'VIDEO') { // console.log(videoElement); // Extract the src attribute var videoSrc = videoElement.getAttribute("src"); // Extract the filename from the src URL var videoFilename = videoSrc.split('/').pop().split('.')[0]; // Save the filename to the videoData object videoData.filename = videoFilename; // Map the videoFilename with wares if needed if (window.wares && window.wares.length > 0) { // console.log('playing: ' + playingVideoTitle); // console.log(videoData.waresMap.entries()); window.wares.forEach((ware, index) => { if(ware.name === playingVideoTitle) { // const fiveMinutesInMs = 900000; // 5 minutes in milliseconds // console.log('#1', ware.starttime); // const newStartTime = ware.starttime - fiveMinutesInMs; // ware.starttime = newStartTime; // console.log('#2', ware.starttime); // console.log(`Start time set to: ${new Date(newStartTime).toString()}`); // console.log(ware); } // console.log('First key:', ware); // console.log('First value:', ware); // console.log(firstValue.starttime); videoData.waresMap.set(videoFilename, ware); // Example mapping }); } // Output the filename or save it as needed if (videoData && videoData.waresMap) { const firstEntry = videoData.waresMap.entries().next().value; if (firstEntry) { const [firstKey, firstValue] = firstEntry; // const date = new Date(firstValue.starttime); // console.log(date.toString()); if(firstValue.isComplete === "Y") { return true; } } else { console.log('Map is empty'); } } return !videoElement.paused; } else { console.log('Video element not found or is not a video tag'); return null; } } function stopPlayingVideo() { var videoElement = document.getElementById('realvideo_html5_api'); if (videoElement && videoElement.tagName === 'VIDEO') { videoElement.pause(); console.log("Video playback stopped"); } else { console.log('Video element not found or is not a video tag'); } } function startPlayingVideo() { var videoElement = document.getElementById('realvideo_html5_api'); if (videoElement && videoElement.tagName === 'VIDEO') { videoElement.play() .then(() => console.log("Video playback started")) .catch((error) => console.error("Error attempting to play video:", error)); } else { console.log('Video element not found or is not a video tag'); } } // Function to change the start time of the video function changeStartTime() { var videoElement = document.getElementById('realvideo_html5_api'); if (videoElement && videoElement.tagName === 'VIDEO') { // const fiveMinutesInMs = 300000; // 5 minutes in milliseconds // const newStartTime = videoData.starttime - fiveMinutesInMs; console.log(videoElement); // videoElement.starttime = newStartTime; // console.log(`New start time (milliseconds): ${newStartTime}`); // console.log(`Start time set to: ${new Date(newStartTime).toString()}`); // videoElement.play() // .then(() => console.log("Video playback started 2")) // .catch((error) => console.error("Error attempting to play video: 2", error)); } else { console.log('Video element not found or is not a video tag'); } } window.addEventListener('load', setupVideoCheck); })();