您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Subtitles fix for Firefox
- // ==UserScript==
- // @name Iflix Subtitles Fix for Firefox
- // @icon https://piay.iflix.com/app/favicon.ico
- // @namespace https://github.com/tkhquang
- // @version 2.33
- // @description Subtitles fix for Firefox
- // @author Quang Trinh
- // @license MIT; https://raw.githubusercontent.com/tkhquang/userscripts/master/LICENSE
- // @homepage https://greasyfork.org/en/scripts/367324-iflix-subtitles-fix-for-firefox
- // @match http*://piay.iflix.com/*
- // @run-at document-start
- // @require https://greasyfork.org/scripts/21927-arrive-js/code/arrivejs.js
- // @grant GM_addStyle
- // @noframes
- // ==/UserScript==
- /* global GM_addStyle */
- /*
- * arrive.js
- * v2.4.1
- * https://github.com/uzairfarooq/arrive
- * MIT licensed
- *
- * Copyright (c) 2014-2017 Uzair Farooq
- */
- /*==================*
- * Reference: http://ronallo.com/demos/webvtt-cue-settings/
- * You can change the below variables to suite your needs.
- *==================*/
- // ==Configuration==
- const lineVTT = 14; //See reference
- const minfontSize = "12px"; //Subtitles font-size won't scale smaller than this value
- const fontSize = "3vmin"; //font-size = minfontSize + this value
- const lineHeight = "150%"; //Better leave this as is - "normal" with lineVTT = 16
- // ==Configuration==
- // ==Codes
- function styleSub() {
- "use strict";
- const css = `video::cue {
- font-size: calc(${minfontSize} + ${fontSize}) !important;
- line-height: ${lineHeight} !important;
- }`;
- if (typeof GM_addStyle !== "undefined") {
- GM_addStyle(css);
- } else {
- const node = document.createElement("style");
- node.type = "text/css";
- node.appendChild(document.createTextNode(css));
- const heads = document.getElementsByTagName("head");
- if (heads.length > 0) {
- heads[0].appendChild(node);
- } else {
- document.documentElement.appendChild(node);
- }
- }
- console.log("iSFix - Styling Done!");
- }
- function alterSub(activeSub) {
- "use strict";
- let activeCues = activeSub.cues;
- function lineCheck() {
- return Boolean(activeCues !== null && activeCues[0] !== undefined && activeCues[0].line === lineVTT);
- }
- if (activeCues !== null && activeCues[0].line !== lineVTT) {
- Object.keys(activeCues).forEach(function (i) {
- activeCues[i].line = lineVTT;
- });
- console.log("iSFix - Done setting lines!");
- }
- if (!lineCheck()) {
- console.log("iSFix - Current line value: " + activeCues[0].line);
- console.warn("iSFix - Unmodified lines => Try changing line value...");
- setTimeout(function () {
- alterSub(activeSub);
- }, 5000);
- return;
- }
- console.log("iSFix - Current line value: " + activeCues[0].line);
- console.log("iSFix - Passed!!!");
- }
- function getSubList(vidPlayer) {
- "use strict";
- const subList = vidPlayer[0].textTracks;
- function getSub() {
- return (function () {
- for (let sub of subList) {
- if (sub.mode === "showing") {
- return sub;
- }
- }
- return false;
- }());
- }
- subList.onchange = function () {
- console.log("iSFix - Subtitles onchange action");
- if (getSub()) {
- alterSub(getSub());
- }
- };
- setTimeout(function () {
- if (getSub()) {
- alterSub(getSub());
- }
- }, 10000);
- }
- function getVidState(vidPlayer) {
- "use strict";
- if (!(/^\/play/).test(window.location.pathname)) {
- return;
- }
- if (vidPlayer.length === 0 || vidPlayer[0] === undefined) {
- console.warn("iSFix - No video? Try getting it after 5s...");
- setTimeout(function () {
- getVidState(vidPlayer);
- }, 5000);
- return;
- }
- styleSub();
- getSubList(vidPlayer);
- }
- (function () {
- "use strict";
- document.arrive(".vimond-player-video", function () {
- console.log("iSFix - Video element available");
- setTimeout(function () {
- getVidState(document.getElementsByClassName("vimond-player-video"));
- }, 1000);
- });
- }());