结构梁配筋最牛插件_YouTube 字幕翻译 —— Chrome 插件

1395f6c25e504224032b88e4d609a9ca.png

“求推荐高质量的XX入门视频”

“YouTube,上面有大量制作精良的免费教程”

“英文我看不懂啊,你看得懂吗?”

“我当然没问题啊!”

这是我常吹的牛逼,其实不是的,英文我经常看不懂,英文的词汇量太多了,生有涯,词无涯。于是我常常敲下空格键,暂停视频,打开有道词典查询,再切回视频,再次敲下空格键继续播放。观影体验极差,所以我就琢磨着做了这样一个Chrome插件:

当你暂停的视频的时候,自动翻译当前英文字幕

插件地址:

https://chrome.google.com/webstore/detail/youtube-%E5%AD%97%E5%B9%95%E7%BF%BB%E8%AF%91/knncklmmdejcadilnfeabejdfekhgdhe?utm_source=chrome-ntp-icon​chrome.google.com

github开源地址:

https://github.com/bugushi/youtube-translator​github.com

开发

以下简单讲解一下插件的开发过程,如果对开发不感兴趣就可以不用往下看了

3ff2df14dd6023253dfa37efcf22424d.png
插件逻辑

目录结构

23810d6ef7b223f441dd22de03716d24.png
Chrome插件目录

结构非常简单,简单说一下各个文件的作用

manifest.json     插件的配置文件,标识插件的名称、版本、图标、权限等信息
background.js     常驻脚本,浏览器启动即执行,一般用于修改浏览器默认样式,tab美化等
contentScript.js  内容脚本,加载特定url时才会执行,url在配置文件中指定

代码

1、首先,我们需要在用户打开 YouTube 时,执行内容脚本以监听视频暂停事件

我们在manifest.json文件中做如下配置,即可在匹配到*.youtube.com时,加载脚本

"content_scripts": [
        {
            "matches": [
                "https://*.youtube.com/*"
            ],
            "js": [
                "contentScript.js"
            ]
       }
]

下一步,我们计划在contentScript中监听视频的暂停事件,但无论如何监听不到,原因是Chrome限定了contentScript运行在沙盒中,不能和宿主页面做交互,所以没有办法直接在contentScript中监听pause事件。

Chrome给我们留了一个口子,contentScript可以修改宿主页面的DOM,于是我们利用这一点,把我们的逻辑代码放到单独的 youtube.js 中,然后在contentScript中只写注入代码:

var script = document.createElement('script');
script.src = chrome.runtime.getURL('youtube.js');
document.body.appendChild(script);

2、监听视频暂停事件,获取字幕文本

这一步比较简单,简单贴一下代码,不做过多解释:

youtube.js

const videoElement = document.querySelector('video');
videoElement && videoElement.addEventListener('pause', () => {
    //...
})


function getCaptionLines() {
    let captionLines = document.querySelectorAll('.ytp-caption-segment');
    let captionTexts = [...captionLines].map(line => {
        return line.innerText;
    })
    return captionTexts;
}

3、调用谷歌API

我调用的谷歌API域名是:translate.google.cn, 所以存在跨域问题,第一步解决跨域问题,在manifest.json中配置:

"permissions": [
        "https://translate.google.cn/"
]

然后,contentScript无法发送跨域请求,所以要借用background.js来发送,我们在contentScript中通知background:

 Array.prototype.forEach.call(captionTexts, (text) => {
        chrome.runtime.sendMessage(
            { contentScriptQuery: "fetchTranslation", text },
            translation => {
                addTranslationToScreen(translation);
            }
        );
})

background收到通知后,发起请求:

chrome.runtime.onMessage.addListener(
    function (request, sender, sendResponse) {
        if (request.contentScriptQuery == "fetchTranslation") {
            var url = googleTranslateAPI + encodeURIComponent(request.text);
            fetch(url)
                .then(response => response.json())
                .then(translation => sendResponse(translation));
            return true;
        }
    }
);

4、最后将翻译字幕添加到页面中,这一步没啥难点,根据自己的喜好调整样式即可,完整代码可在github查看:

https://github.com/bugushi/youtube-translator​github.com

另外我做了一套收费的前端基础入门视频,推荐一下给想入门的小伙伴呗,谢谢啦:

前端基础16课--从入门到放弃 - 网易云课堂​study.163.com
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RePP插件说明 最好用的PKPM配归并和对比插件,适用于AutoCAD04以上的版本,主要对PKPM的SATWE结果进行处理。与同类插件相比:第一、本插件无需安装,放置任意文件夹,用CAD加载即可运行;第二、文件占用内存小;第三、功能实用,且操作最为简单;第四、当处理大数据时,速度明显优于同类插件。大家可以拿其他插件进行对比。 百度网盘下载地址:pan.baidu.com/s/1sjIIEex 功能1:配层归并,命令:GB 1、在PKPM的SATWE模块中将字体大小设置好。推荐设置文字高度0.1,宽度0.2。 2、用PKPM的TCAD模块中将SATWE计算书转换成DWG格式(CAD文件)。 3、将转换好的DWG格式计算书参照进CAD并炸开参照。探索者可以直接炸开,若没有安装探索者,可以使用CAD的绑定操作将参照转换为块,然后将块分解即可。 4、加载插件。 5、运行归并命令GB。 整个过程不用指定字体颜色和图层,数据越多,速度优势越明显。详细操作见下文。 功能2:计算书对比,命令:DB 1、将参照导入并炸开。 2、加载插件。 3、输入命令DB。 4、选中要对比的区域,得到对比结果,不同的地方用红色字体显示。 详细操作参照归并功能,下图为对比的结果。 功能3:计算板负长度,命令:FC 计算公式:负长度=两点间的距离x跨度系数-调整值,其中跨度系数和调整值可用FCSZ命令进行设置,跨度系数初始值为0.25(表示1/4跨),调整值初始值为50。 功能4:文本批量替换,命令:PLTH 设置选项: 输入被替换内容:从键盘输入被替换内容; 选择被替换内容:从屏幕用鼠标选中被替换内容; 字母代替钢符号:用d、D、f、F分别代替HPB300、HRB335、HRB400、HRB500钢; 不用字母不代替钢符号:可避免对含有d、D、f、F的文本替换出错; 全部替换:将文本内容整体替换为其他内容,比如将“hello”替换为“hi”,程序将会匹配内容仅为“hello”的文本,然后将其替换为“hi”。可使用通配符进行匹配,“*”代表任意多任意字符,“?”代表一个任意字符。 全部替换实例:可以替换“hello”→“hi”; 无法替换“hello,man”→“hi,man”。 部分替换:将文本内容部分替换为其他内容,比如将“hello”替换为“hi”,程序将会匹配所有含有“hello”的文本,然后将其替换为“hi”。 全部替换实例:可以替换“hello”→“hi”; 可以替换“hello,man”→“hi,man”。 目前插件提供试用版,如果大家喜欢请支持正式版,就几元钱,让作者有更大动力,一次购买可以无限升级,后续还会增加功能。
msteel梁配平法是一种常用的梁截面配设计方法,它能够根据梁的受力情况和设计要求,进行截面尺寸和配的优化设计。然而,有时候在使用过程中可能会遇到无法进行修改的情况。 首先,一种可能的原因是输入数据或者设计要求有误。如果输入的截面尺寸或者受力情况不符合实际情况,那么梁配平法就无法进行正确的计算和修改。 其次,如果梁的约束条件不满足,也会导致无法修改。例如,当梁的跨度或者支座条件发生变化时,原先的设计可能无法满足新的要求,从而导致无法进行修改。 此外,如果软件或者计算工具存在问题,也可能导致无法进行修改。在使用msteel梁配平法的时候,如果软件出现故障或者版本不兼容等问题,就无法进行修改。 最后,可能是用户操作不当导致的问题。msteel梁配平法作为一种专业的设计工具,无论是输入数据还是使用方法都需要一定的技术和经验。如果用户对软件操作不熟悉或者没有正确理解配设计原理,就可能无法正确进行修改。 总结来说,msteel梁配平法无法修改可能是由于输入数据错误、约束条件不满足、软件问题或用户操作不当所导致的。在解决这个问题时,我们可以检查输入数据、确认约束条件、升级软件或者寻求专业人士的帮助,以确保正常进行梁的配设计。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值