本人新手,最近在写一个 user-script。视频 src 不确定,要自己拼接,而且清晰度部分的 src 还挺多花样的,所以我原来打算这样
var Preview = documeng.createElement('video')
Preview.src="http://cc3001.dmm.co.jp/litevideo/freepv/" + arr1[0] + "/" + arr1.slice(0,3).join("") + "/" + lib_pf + "/" + lib_pf + "_dmb_w.mp4";
Preview.onerror=function() {
Preview.src="http://cc3001.dmm.co.jp/litevideo/freepv/" + arr1[0] + "/" + arr1.slice(0,3).join("") + "/" + lib_pf + "/" + lib_pf + "_dm_w.mp4";
Preview.onerror=function() {
Preview.src="http://cc3001.dmm.co.jp/litevideo/freepv/" + arr1[0] + "/" + arr1.slice(0,3).join("") + "/" + lib_pf + "/" + lib_pf + "_sm_w.mp4";
Preview.onerror=function() {
//一个接一个的 onerror=function...
}
}
}
但是这样感觉非常难看,而且想添加新 url 规则的时候更是艰辛,于是我之后用 function 试了下但是发现在 function 中设置 onerror 似乎不起作用。。请问大家有什么好的建议?
Thanks in advance.
dmm 大家都懂的就不说了
1
tbag781623489 OP 关于 onerror 在 function 似乎不起作用,我个人有点疑惑:比如
``` function set_url(self) { self.src = 'www.example.com/123' self.onerror = function() { self.src='www.example.com/456'; console.log('This step was triggered') } } video.src = set_url(video) video.onerror = function() { this.src='www.example.com/789' } ``` 上面的 console.log 是不会被执行的,也就是不会有把 url 改成 456 的尝试。请问是为什么呢? |
2
vincentxu 2017-06-23 23:11:16 +08:00 via iPhone
在最顶层绑定一个 error 事件就可以了,没必要重新绑定
|
3
tbag781623489 OP @vincentxu 有点不懂,dalao 可否举例说说?
|
4
autoxbc 2017-06-27 06:20:13 +08:00
@tbag781623489 我在 dmm 的页面里看到了这样的代码,不知道题主为什么要用字符串拼接 url,为什么要用 onerror 去试文件是否存在。简单的在 iframe 里读取 json,推送到父窗口生成 video 标签就可以了。
https://gist.github.com/anonymous/ce1c3bfe8e8b86a0fd849844953c361c |
5
tbag781623489 OP @autoxbc 咦,看起来不错,这不用日本 ip 就能获取吗? 我自己用的是新加坡的
|
6
autoxbc 2017-06-27 21:32:07 +08:00
@tbag781623489 不用日本 ip 不能获取,dmm 网页限制 ip,只有最终文件下载不限制。如果是需要用番号直接生成下载链接,那这种方法不行。
看了下一楼的代码,onerror 只能定义一次,多次定义离 error 事件最近的有效。javascript 的异步流程决定了,一楼的实际流程是 src = 123 self.onerror = {...} 此时 http 状态码还没有返回,error 事件不会触发 video.onerror = {...} 回调被覆盖了 ... 过了一段时间 src = 123 的 error 触发,执行 src = 789 所以 src = 456 和 log 不会执行 |
7
tbag781623489 OP @autoxbc 感谢回复 实际上我上 stack 搜到了个自循环函数自己改了下 现在看起来优雅多了 gayhub 上 commit 那里能搜到
用这种方式主要是想方便自己有多个 proxy 日本的流量只有 15g 现在对水印无比痛恨 想自己买个 dmm 但又听说有的只卖 dvd。。 |