我有一个小的Chrome扩展程序,将此行注入Netflix js:
netflix.cadmium.UiEvents.events.resize[1].scope.events.dragend[1].handler(null, {value: 123, pointerEventData: {playing: true}});
特别注意dragend[1]
。在某些情况下,这样可以正常工作,而在其他情况下只有dragend[0]
有效。如果dragend[1]
有效,那么dragend[0]
将抛出异常,反之亦然。当我围绕该行包装try / catch块时,它永远不会起作用。永远不会输入catch块,异常表面将返回浏览器。
如何捕获异常? (注意:我找不到与该行代码相关的任何属性值,这些属性值表明我应该使用0还是1。)似乎我唯一的希望是能够捕获异常,如果我尝试0并且它出错,然后尝试1,反之亦然。
错误信息通常是这样的:
无法读取属性'目标'为null
有什么想法吗?
答案 0 :(得分:0)
如果您希望解耦逻辑,可以执行以下操作:
try {
netflix.cadmium.UiEvents.events.resize[1]
.scope.events.dragend[0].handler(null, {
value: 123,
pointerEventData: {
playing: true
}
})
} catch(e) {
netflix.cadmium.UiEvents.events.resize[1]
.scope.events.dragend[1].handler(null, {
value: 123,
pointerEventData: {
playing: true
}
})
}
try
导致错误,dragend[0]
块将捕获异常
catch
阻止 无法抛出异常 )try
块永远不会出现异常
catch
逻辑永远不会运行这取决于处理程序的输出是否为 Promise
。如果是这样,那么你可以这样做:
const netflixHandler = idx => netflix.cadmium.UiEvents.events.resize[1]
.scope.events.dragend[idx].handler(null, {
value: 123,
pointerEventData: {
playing: true
}
})
netflixHandler(0) //Expecting a Promise
.catch(_ => netflixHandler(1)) //If failed, then rectify, and continue the chain!
.then(_ => /*Continue rest of the logic here*/)