我有一個video
元素,並且通過jQuery附加一個onplay
處理到視頻的腳本:在我的腳本執行之前,DOM事件是否會觸發?
<video id="vid" />
<!-- ... -->
<script type="text/javascript">
$('#vid').on('play', function() {
$(this).addClass('playing');
});
</script>
根據this answer,用戶可能會被加載腳本之前與視頻播放器進行交互。但是我需要確保在觸發onplay
事件之前,我的事件處理程序已連接。
爲了測試這個,我在video
之後加了一個腳本,它調用了play()
。該處理程序在所有主流瀏覽器上運行,除了WebKit,它根本不播放視頻。即使將jQuery語句包裝在$().ready()
函數中,仍然可以在onplay
之前附加處理程序。
是否保證我的腳本不會錯過任何來自HTML5視頻的事件?這同樣適用於所有DOM事件嗎?如果我將async
添加到腳本怎麼辦?
我在覆蓋iPad上的錨點元素的點擊事件時遇到了問題。如果我在呈現元素之前點擊元素,即使我的事件處理程序始終阻止默認操作,它也會經常導航。我最終讓我的標記不受js友好,所以這成爲一個非問題。 – Timothy003 2012-04-05 21:26:53
三年後,我重新回顧了這個問題,因爲在我的腳本可以附加事件處理程序之前,Chrome在'source'元素上觸發'error'事件。內聯腳本不保證競爭條件不會發生;事實上,如果我在腳本內部或之前添加一個空白字節,Chrome將在下載空白時運行事件循環。 – Timothy003 2015-04-02 21:47:13