请教一个 video 的多个 onerror 的问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a Javascript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
Javascript 权威指南第 5 版
Closure: The Definitive Guide
tbag781623489
V2EX    Javascript

请教一个 video 的多个 onerror 的问题

  •  
  •   tbag781623489 2017-06-23 22:12:20 +08:00 6150 次点击
    这是一个创建于 3037 天前的主题,其中的信息可能已经有所发展或是发生改变。

    本人新手,最近在写一个 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 大家都懂的就不说了

    7 条回复    2017-06-28 09:28:51 +08:00
    tbag781623489
        1
    tbag781623489  
    OP
       2017-06-23 23:01:04 +08:00
    关于 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 的尝试。请问是为什么呢?
    vincentxu
        2
    vincentxu  
       2017-06-23 23:11:16 +08:00 via iPhone
    在最顶层绑定一个 error 事件就可以了,没必要重新绑定
    tbag781623489
        3
    tbag781623489  
    OP
       2017-06-24 12:16:05 +08:00
    @vincentxu 有点不懂,dalao 可否举例说说?
    autoxbc
        4
    autoxbc  
       2017-06-27 06:20:13 +08:00
    @tbag781623489 我在 dmm 的页面里看到了这样的代码,不知道题主为什么要用字符串拼接 url,为什么要用 onerror 去试文件是否存在。简单的在 iframe 里读取 json,推送到父窗口生成 video 标签就可以了。
    https://gist.github.com/anonymous/ce1c3bfe8e8b86a0fd849844953c361c
    tbag781623489
        5
    tbag781623489  
    OP
       2017-06-27 17:49:25 +08:00
    @autoxbc 咦,看起来不错,这不用日本 ip 就能获取吗? 我自己用的是新加坡的
    autoxbc
        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 不会执行
    tbag781623489
        7
    tbag781623489  
    OP
       2017-06-28 09:28:51 +08:00 via iPhone
    @autoxbc 感谢回复 实际上我上 stack 搜到了个自循环函数自己改了下 现在看起来优雅多了 gayhub 上 commit 那里能搜到
    用这种方式主要是想方便自己有多个 proxy 日本的流量只有 15g 现在对水印无比痛恨 想自己买个 dmm 但又听说有的只卖 dvd。。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     885 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 22:07 PVG 06:07 LAX 15:07 JFK 18:07
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86