2015-06-28 50 views
2

我试图检测HBO Go电影何时使用javascript完成。不幸的是,HBO Go使用Flash,并且我没有Flash经验。使用javascript检测控制台事件

我注意到,当电影结束时,Chrome浏览器的JavaScript控制台显示此:

00:02:30:0596 TimeEvent.COMPLETE 
    (anonymous function) @ VM12786:1 

我也跟着VM12786:1,发现这个:

try { __flash__toXML(console.error("00:02:30:0596 TimeEvent.COMPLETE")) ; } catch (e) { "<exception>" + e + "</exception>"; } 

我不太清楚无论什么这些意思。有人可以简单解释它吗?我已经广泛搜索,但没有发现任何我明白的东西。

而且,有没有什么办法可以用javascript或jQuery检测到它已被触发?

回答

2

下面是关于那些JS位的介绍:

try { 
    __flash__toXML(console.error("00:02:30:0596 TimeEvent.COMPLETE")); 
} catch (e) { 
    "<exception>" + e + "</exception>"; 
} 

__flash__toXML功能是一种机制,以使Flash程序通过JavaScript和网页通信(简短解释here,无关的文章)。看起来这段代码是处理视频结局事件的较大部分的一部分。

奇怪的粘性东西看起来像一个无用的代码段,只是作为占位符存在,但我需要查看上下文以更好地理解它。事实上,它什么都不做。

这里是我的回答你的问题:

不幸的是,没有事件时,可以捕获控制台的操作直接。您需要替换触发自定义事件的自己的函数,然后处理该事件。 This article很好地解释了这个过程。您将需要修改内部intercept功能的主窗口,您可以在traditional ways处理上触发事件:

$(window).trigger("myapp.console.log"); 

注:这可能不是对内容的脚本工作,但这是先进并取决于实施。如果您使用的是注入浏览器的东西,则替换该函数只会影响内容脚本的沙箱。

+0

I同意。 'Try/Catch'模块几乎看起来像“只是测试”代码,不是吗?无论如何,除非Flash应用程序在播放完成后发出JavaScript事件,否则它不可能(插件与其他HTML内容不在同一域/上下文中)。他确实需要检查HBO视频页面的html源代码,也许有一些事件的线索?否则不会发生枪战。HBO和Netflix没有尝试像Youtube API –

+0

是的,它看起来不像是产品代码。看起来Flash可能会发出一个触发它的事件,但是,这可能是使用JS可捕获的东西。 – cyberbit

+0

正如我从问题中了解到的那样,控制台确实显示错误消息,所以即使代码看起来有点奇怪,它仍然会在JavaScript中创建可捕获事件,不是吗?这就是为什么我给出了关于劫持console.error函数的答案。这不行吗? – m69

1

我在StackOverflow上了解到,您可以劫持控制台功能,如示例中那样,我已将警报添加到console.error函数中。

var conerr = console.error; 
 

 
console.error = function() 
 
{ 
 
    alert("console error: " + arguments[0]); /* do stuff here */ 
 
    return conerr.apply(console, arguments); 
 
} 
 

 
setTimeout(function() {console.error("00:02:30:0596 TimeEvent.COMPLETE");}, 1000);

+0

我认为这是我最初从这个问题中学到了这个技巧:http://stackoverflow.com/questions/8000009/is-there-a-way-in-javascript-to-listen-console-events – m69