Closed orz12 closed 1 year ago
有几个小问题
handler: class Handler extends BaseHandler {
constructor() {
super();
this.addTopListener();
}
async parse() {
// 获取视频链接 videoUrl 和标题 title
...
this.media.setVideoUrl(videoUrl);
this.media.setTitle(title);
}
}
有几个小问题
- 没有提供例子,请参考已经有的 handler,提供一个可以测试的链接,以注释形式写入代码中
- 请不要修改已经有的方法,标题在 handler 中设置即可,请参考下列代码
- 子页面上传链接给父页面已经有方法实现,不要重复实现,请参考下列代码
handler: class Handler extends BaseHandler { constructor() { super(); this.addTopListener(); } async parse() { // 获取视频链接 videoUrl 和标题 title ... this.media.setVideoUrl(videoUrl); this.media.setTitle(title); } }
我可能没太理解……子页面通过message传上来的media要怎么触发(或者传递给)parse?还是说另外写一个addTopListener覆盖通用的?
我的思路是这样,因为这个子页面内才是选择和切换课程的地方,子页面本身没有更换,只是局部刷新了,也就是说父页面需要持续接收子页面传过来的media,才能知道现在播放的课程;
我看了代码里之前写的所有带有addIframeListener()的解析器,都不涉及这个问题,基本都是父页面切换剧集之类的,然后把子页面替换掉,所以如果只在addIframeListener里面判空才替换,应该是不太一样;
另外也只有一个叫做【天空影视】的网站在子页面有setTitle(config.title)的写法,虽然我打开这个网站一直显示
Play-With-MPV:解析失败:SecurityError: Failed to read the 'localStorage' property from 'Window': Access is denied for this document.
不知道是不是我配置得不对,画面也加载不出来,所以我不太确定它的逻辑或者结果是什么,能不能真的修改到标题……
我是个前端小白,理解不到位的地方还请多多指教,谢谢大佬
伪代码都给你了,而且你说的子页面局部刷新的问题,已经有现成的例子,比如:
{
// ✅ https://www.dora-family.com/Resource:TV
name: "哆啦A梦新番",
home: [
"https://www.dora-family.com/Resource:TV"
],
regex: /^https:\/\/www\.dora-family\.com\/Resource:TV/g,
handler: class Handler extends BaseHandler {
initCheck() {
if (super.initCheck()) {
return true;
}
let oldVideoUrl = this.media.videoUrl;
let newVideoUrl = this.videoParser();
if (oldVideoUrl && oldVideoUrl != newVideoUrl) {
return true;
}
return false;
}
async parse() {
this.media.setVideoUrl(this.videoParser());
}
}
},
如果你还是不会,我建议你自己用就行了 😂,因为这种学习类视频, 第一受众很小; 第二是否应该更专注于内容,我不太理解需要调用外部播放器来看的理由; 第三是我没法一步一步教你怎么写,这样比我自己写的时间更本都高,如果你有兴趣,可以参考已有解析器+上网自学 😂。
伪代码都给你了,而且你说的子页面局部刷新的问题,已经有现成的例子,比如:
{ // ✅ https://www.dora-family.com/Resource:TV name: "哆啦A梦新番", home: [ "https://www.dora-family.com/Resource:TV" ], regex: /^https:\/\/www\.dora-family\.com\/Resource:TV/g, handler: class Handler extends BaseHandler { initCheck() { if (super.initCheck()) { return true; } let oldVideoUrl = this.media.videoUrl; let newVideoUrl = this.videoParser(); if (oldVideoUrl && oldVideoUrl != newVideoUrl) { return true; } return false; } async parse() { this.media.setVideoUrl(this.videoParser()); } } },
如果你还是不会,我建议你自己用就行了 😂,因为这种学习类视频, 第一受众很小; 第二是否应该更专注于内容,我不太理解需要调用外部播放器来看的理由; 第三是我没法一步一步教你怎么写,这样比我自己写的时间更本都高,如果你有兴趣,可以参考已有解析器+上网自学 😂。
感谢提点,我理解了,给initcheck赋值true可以在定时器里触发重新初始化handler,这样确实更好。您对脚本思路更熟悉,代码的封装方式和风格也值得学习,感谢您的不吝赐教。至于这个网站,我是作为一个切入点来尝试写(当然用MPV是便于加速静音片段),其他网站或许也有类似需求,我尽量按照您的思路来实现,减少您的麻烦。ฅ՞•ﻌ•՞ฅ
这个暂时不合并了 😂
这个暂时不合并了 😂
没关系 不过我想知道一下 你觉得最后我改的这个写法合适吗?
勉强实现了 但感觉不太优雅 还请斧正 *未支持选择清晰度(这个应该靠api来查询对应链接,但我能力不够,没找到那个资源编号是从哪里来的,只好换这个方式获取链接了)