我是靠谱客的博主 清秀保温杯,最近开发中收集的这篇文章主要介绍第三个脚本——时间加速and视频倍速本文主要内容完整示例,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

目录

本文主要内容

granr属性介绍

run-at属性

时间加速原理

视频倍速原理

完整示例


本文主要内容

介绍grant属性,run-at属性以及时间加速,视频倍速原理

granr属性介绍

相关函数四个:

GM_setValue
GM_getValue
GM_listValues
GM_deleteValue

当然,还有存储内容变动时相关的函数

GM_addValueChangeListener
GM_removeValueChangeListener

接下来分别介绍一下

GM_setValue: 

假设代码 GM('myName', 'woonigh'

在Tampermonkey管理的存储中,把名字是myName的存储,设置值为 'woonigh' 

GM_getValue:

GM_getValue('myName', 'woonigh')

就是把名字是 myName 的存储的值读取出来,

如果找不到myName的值呢?那就用默认的值 'woonigh' 

GM_listValues: 

这个没有参数,就是把所有存储的名字罗列出来。

返回结果是 Array类型 

适合于:

  • 你的应用很大,需要做存储数据管理
  • 你的应用数据很乱

GM_deleteValue:

假设代码 GM_deleteValue('myName')

就是删除名字叫做 myName 的存储。

和上面 GM_listValues 一样,多用于数据管理。两者是一对。  

GM_addValueChangeListener:

对指定的名字进行监听,该函数返回一个id

该函数可以跨函数通信

格式为

GM_addValueChangeListener(name, function(name, old_value, new_value, remote) {

})

name为值的名称

函数的name也是

old_value为旧值

new_value为新值

remote区分这个值的改变的所属,如果是由本标签页引起的,则为false,如果由其他标签页引起的,为true。

GM_removeValueChangeListener:

移除一个监听器

GM_removeValueChangeListener(listener_id)
根据监听器的 ID,把监听器移除

示例如下:

// 存储中 增加一个存储量,名字叫 'myName', 值是'woonigh'
let my_name = GM_setValue('myName', 'Woonigh');

// 读取存储中的,名字叫 'hisName' 的值, 如果没有这个名字的存储的话,那返回来的值就叫 'Tony'
let his_name = GM_getValue('hisName', 'Tony');

// 把存储中所有的存储名字罗列出来
let all_value_names = GM_listValues();
console.log(all_value_names); // 输出  ["myName"]

// 给名字叫 'myName' 的存储添加一个监听器
let listener1 = GM_addValueChangeListener('myName', function (name, old_value, new_value, remote) {
  console.log(`
    发生变化的存储名是: ${name},
    ${name} 原来的值是 ${old_value},
    ${name} 新的值是 ${new_value},
    这个值的变动是由${remote ? '本标签页' : '其他标签页'} 引起的。
  `);
});

GM_setValue('myName', 'Maxwell');

// 把 id 是listener1 的监听器移除
GM_removeValueChangeListener(listener1);

// 把名字叫 'myNamae' 的存储删除掉
GM_deleteValue('myName');

run-at属性

一个比较重要的属性

当我们设置为:// @run-at document-start  

表示希望脚本能尽快注入,在时间加速时希望抢在前端调用setInterval之前来替换掉setInterval函数

时间加速原理

  如网站:时间校准_北京时间校准_北京时间在线校准_现在北京时间

但是该网站的时间加速已经失效了

一般情况下,都是使用setInterval来做定时器,我们只要把这个定时器的时间缩短,比如之前是1s触发一次,现在变成500ms触发一次,那么就相当于时间缩短了一倍.
怎么缩短呢?我们可以劫持setInterval这个函数,传入值为1000,我们把他变为500.代码类似下面这样:

let hookSetInterval=window.setInterval;//将系统提供的setInterval保存
window.setInterval=function(a,b){//将系统的setInterval替换为我们自己的
    return hookSetInterval(a,b/2);//经过处理后再调用系统的setInterval
}

在脚本中也是类似的代码,不过如果使用//@grant unsafeWindow的话,window替换为unsafeWindow,
也就是:

// @grant        unsafeWindow
let hookSetInterval=unsafeWindow.setInterval;//将系统提供的setInterval保存
unsafeWindow.setInterval=function(a,b){//将系统的setInterval替换为我们自己的
    return hookSetInterval(a,b/2);//经过处理后再调用系统的setInterval
}

视频倍速原理

视频倍速主要涉及h5的video,里面有一个播放速度的属性:playbackRate,最高为16倍.

解释网址如:HTMLMediaElement.playbackRate - Web API 接口参考 | MDN

像B站的视频页面,我们可以直接通过document.querySelector('video')获取,,如果有多个选择器写好也没问题.代码如下:

document.querySelector('video').playbackRate=2;

完整示例

但是关于时间加速的网站,已经不能通过此方法实现,B站可以但也有一定局限性,大家可以仿照写其他网站的,我们也可能遇到一下问题

1.视频暂停再取消会重置倍速

2.网站代码与脚本冲突

解决方法

1.固定playbackRate属性,或者让他网页的js不重置倍速,再暴力点可以通过计时器定时设置倍速

2.进行延迟注入

3.追根溯源,找到最根本的问题,一次性解决

// ==UserScript==
// @name         视频加速与时间加速
// @namespace    https://bbs.tampermonkey.net.cn/
// @version      0.1
// @description  用于:http://time.tianqi.com/的时间加速和用于bilibili的一个视频倍速:https://www.bilibili.com/video/BV1ys411p7To
// @author       You
// @match        http://time.tianqi.com/
// @match        https://www.bilibili.com/video/*
// @run-at       document-start
// @grant        unsafeWindow
// ==/UserScript==

let rate=4;//倍速

if(unsafeWindow.location.href.indexOf('time.tianqi.com')!=-1){
    //时间网站,用时间加速
    let hookSetInterval=unsafeWindow.setInterval;//将系统提供的setInterval保存
    unsafeWindow.setInterval=function(a,b){//将系统的setInterval替换为我们自己的
        return hookSetInterval(a,b/rate);//经过处理后再调用系统的setInterval
    }
}else{
    //bilibili用视频加速
    unsafeWindow.onload=function(){
        //在元素都加载完成后再监听video的播放时间,再进行倍速设置
        unsafeWindow.document.querySelector('video').onplay=function(){
            unsafeWindow.document.querySelector('video').playbackRate=rate;
        }
    }
}

俺是初学者,请大佬们不要见笑,请多多指点,谢谢!!!

最后

以上就是清秀保温杯为你收集整理的第三个脚本——时间加速and视频倍速本文主要内容完整示例的全部内容,希望文章能够帮你解决第三个脚本——时间加速and视频倍速本文主要内容完整示例所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(41)

评论列表共有 0 条评论

立即
投稿
返回
顶部