您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Forces autoplay to be turned off in embedded media players on BBC websites.
// ==UserScript== // @name Disable BBC EMP Autoplay // @version 1.3.2 // @description Forces autoplay to be turned off in embedded media players on BBC websites. // @author uxamend // @namespace https://greasyfork.org/en/users/231373-uxamend // @match *://emp.bbc.co.uk/* // @match *://emp.bbc.com/* // @grant none // @run-at document-idle // @license CC0-1.0 // ==/UserScript== "use strict"; var debug_logging_on = false; var debug_script_name = "Userscript: Disable BBC EMP Autoplay" function debug_log(message) { if(debug_logging_on){ console.log("[" + debug_script_name + "] " + message); } } // Turns off a "p_autoplayToggle" autoplay toggle // Parameter 'confirmations' is number of times to go back and confirm that // The toggle actually stayed where we put it. function disable_autoplay_p(autoplay_toggle, confirmations) { function confirm() { disable_autoplay_p(autoplay_toggle, confirmations - 1); } function try_again() { disable_autoplay_p(autoplay_toggle, confirmations); } var autoplay_state = autoplay_toggle.getAttribute("aria-checked"); debug_log("Current autoplay state: " + autoplay_state); if(autoplay_state == "true") { debug_log("Autoplay is on. Turning off autoplay."); autoplay_toggle.click(); // The autoplay toggle doesn't work initially, so we need to keep trying // until it does work. (Waiting for the BBC's code to add event handler.) autoplay_state = autoplay_toggle.getAttribute("aria-checked"); debug_log("Toggle state is now \"" + autoplay_state + "\"."); if(autoplay_state == "true") { // Toggle didn't work. Try again. debug_log("Trying again in 500ms."); setTimeout(try_again, 500); } else { // Toggle appeared to work, but we should check it hasn't gone back. if(confirmations > 0) { debug_log("Checking to confirm successful toggle in 500ms...") setTimeout(confirm, 500); } } } else if(debug_logging_on) { debug_log("Autoplay is turned off."); if(confirmations > 0) { debug_log("Checking it's still off in 500ms..."); setTimeout(confirm, 500); } } } // Turns off a "gcp_onOffSwitchButton" autoplay switch function disable_autoplay_gcp(autoplay_switch) { var autoplay_state = autoplay_switch .getElementsByClassName("gcp_onOffSwitchButtonSelected")[0] .textContent; debug_log("Current autoplay state: " + autoplay_state); if(autoplay_state == "ON") { debug_log("Autoplay is on. Turning off autoplay."); autoplay_switch.click(); } else if(debug_logging_on) { debug_log("Autoplay is already turned off."); } } function get_autoplay_switch_and_disable() { debug_log("Trying to find the autoplay switch..."); var autoplay_toggle = document.getElementById("p_autoplayToggle"); var autoplay_switch = document.getElementsByClassName("gcp_onOffSwitchButton")[0]; var video_element = document.getElementById("p_v_player_0"); if(autoplay_toggle || autoplay_switch) { if(autoplay_toggle) { debug_log("Found autoplay toggle."); // It seems that when the page is first loaded, the toggle has a state that doesn't // reflect what it will ultimately become. We have to wait until the video is // playing before we can execute our disable_autoplay_p function, otherwise it can // end up thinking autoplay is already disabled when it isn't. if(video_element.readyState < 1) { debug_log("Video isn't ready. Waiting 500ms..."); setTimeout(get_autoplay_switch_and_disable, 500); } else { disable_autoplay_p(autoplay_toggle, 10); } } if(autoplay_switch) { debug_log("Found autoplay switch."); disable_autoplay_gcp(autoplay_switch); } } else { debug_log("Couldn't find autoplay control. Waiting 500ms..."); setTimeout(get_autoplay_switch_and_disable, 500); } } get_autoplay_switch_and_disable();