2015-06-28 75 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