Greasy Fork

来自缓存

Greasy Fork is available in English.

coursera开启中英双字幕(coursera subtitle CN+EN)

添加了coursera视频开启和关闭中英双字幕的功能

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         coursera开启中英双字幕(coursera subtitle CN+EN)
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  添加了coursera视频开启和关闭中英双字幕的功能
// @author       zhhsh
// @include      *://www.coursera.org/*
// @match        https://www.coursera.org/*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';
    //if you want to change the subtitles of other languages or add more subtitles,change the language tag of subtitles in line 36:'["en", "zh-CN"]'
    /*
    核心代码如下:
    var myvideo = document.getElementsByTagName('video')[0];
    for (var i = 0; i < myvideo.textTracks.length; i++) {
        ["en", "zh-CN"].indexOf(myvideo.textTracks[i].language) > -1 ? myvideo.textTracks[i].mode = "showing" : myvideo.textTracks[i].mode = "hidden";
    }
    不使用脚本或脚本失效时,只需在控制台执行以上代码,就能开启双字幕,但是每次切换视频都要重新执行一遍
    核心代码是从别人的文章里看来的,来源:https://hieast.github.io/2017/11/21/coursera-enable-bilingual-subtitle/
    */

    //双字幕按钮
    var dualSubtitlesBtn = document.createElement("a");
    dualSubtitlesBtn.innerHTML='双字幕';
    dualSubtitlesBtn.classList.add('nav-link');
    dualSubtitlesBtn.classList.add('dim');
    dualSubtitlesBtn.classList.add('body-1-text');
    dualSubtitlesBtn.setAttribute('aria-label','双字幕');
    dualSubtitlesBtn.href='javascript:void(0);';
    dualSubtitlesBtn.addEventListener('click',function(){
        myvideo = document.getElementsByTagName('video')[0];//每次都刷新video对象,避免“视频已经播放下一个,video还是上一个视频”的情况
        for (var i = 0; i < myvideo.textTracks.length; i++) {//显示中英双字幕
            ["en", "zh-CN"].indexOf(myvideo.textTracks[i].language) > -1 ? myvideo.textTracks[i].mode = "showing" : myvideo.textTracks[i].mode = "hidden";
        }
    });

    //关闭字幕按钮,因为使用双字幕后,原来的‘关闭字幕’功能会有异常,所以添加新的‘关闭字幕按钮’
    var closeSubtitlesBtn = document.createElement("a");
    closeSubtitlesBtn.innerHTML='无字幕';
    closeSubtitlesBtn.classList.add('nav-link');
    closeSubtitlesBtn.classList.add('dim');
    closeSubtitlesBtn.classList.add('body-1-text');
    closeSubtitlesBtn.setAttribute('aria-label','无字幕');
    closeSubtitlesBtn.href='javascript:void(0);';
    closeSubtitlesBtn.addEventListener('click',function(){
        myvideo = document.getElementsByTagName('video')[0];//每次都刷新video对象,避免“视频已经播放下一个,video还是上一个视频”的情况
        for (var i = 0; i < myvideo.textTracks.length; i++) {//关闭所有字幕
            myvideo.textTracks[i].mode = "hidden";
        }
    });

    //分隔符
    var seperatorBar = document.createElement('div');
    seperatorBar.classList.add('divider');

    var mycon;
    var myvideo;

    var iterateTimes = 0;
    (function init(){
        mycon = document.getElementsByClassName('rc-PreviousAndNextItem')[0];
        myvideo = document.getElementsByTagName('video')[0];
        if(mycon&&myvideo){//等mycon和myvideo都存在的时候执行
            mycon.prepend(seperatorBar);
            mycon.prepend(dualSubtitlesBtn);
            mycon.prepend(seperatorBar.cloneNode());
            mycon.prepend(closeSubtitlesBtn);
        }else{
            if(++iterateTimes<10){//限制计时器的重复执行次数,避免那些本来就没有视频的coursera页面无限setTimeout...,也可以修改触发脚本的url的规则@include,不会
                setTimeout(init, 1000);
            }
        }
    })();

})();