Skip to content

Commit dcc671c

Browse files
committed
Inject addEventListener hook before DOMContentLoaded on every page
1 parent 699174c commit dcc671c

File tree

2 files changed

+22
-2
lines changed

2 files changed

+22
-2
lines changed

content_scripts/inject_script.coffee

+13-1
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,25 @@ oldValue =
1717
else
1818
null
1919

20-
# Injection method taken from method 3 of this stackoverflow answer http://stackoverflow.com/a/9517879
20+
firstDocumentElementChild = document.documentElement.firstElementChild
21+
2122
for script in injectScripts
23+
# Injection method taken from method 3 of this stackoverflow answer http://stackoverflow.com/a/9517879
2224
document.documentElement.setAttribute listenerName, fetchFileContents script
2325
document.documentElement.dispatchEvent new CustomEvent eventName
2426

27+
# Also inject as a script, so that we can still catch any addEventListener call fired at/after
28+
# DOMContentLoaded.
29+
scriptEl = document.createElement "script"
30+
scriptEl.src = chrome.runtime.getURL injectScripts[0]
31+
document.documentElement.insertBefore scriptEl, firstDocumentElementChild
32+
2533
# Clear our event listener and restore the original, if there was one.
2634
if oldValue?
2735
document.documentElement.setAttribute listenerName, oldValue
2836
else
2937
document.documentElement.removeAttribute listenerName
38+
39+
scriptEl = document.createElement "script"
40+
scriptEl.src = chrome.runtime.getURL injectScripts[0]
41+
document.documentElement.insertBefore scriptEl, document.documentElement.firstElementChild

pages/addEventListener_hook.coffee

+9-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
return if document.documentElement.hasAttribute("vimium-listening-for-onclick-listeners") or
2+
document.documentElement.hasAttribute("vimium-listening-for-onclick-listeners-slow")
3+
14
_addEventListener = Element::addEventListener
25

36
Element::addEventListener = (type, listener, useCapture) ->
@@ -6,4 +9,9 @@ Element::addEventListener = (type, listener, useCapture) ->
69
@setAttribute "vimium-has-onclick-listener", ""
710
_addEventListener.apply this, arguments
811

9-
document.documentElement.setAttribute "vimium-listening-for-onclick-listeners", ""
12+
if window.event?
13+
# Executing before any page scripts.
14+
document.documentElement.setAttribute "vimium-listening-for-onclick-listeners", ""
15+
else
16+
# Executing before DOMContentLoaded, after page scripts.
17+
document.documentElement.setAttribute "vimium-listening-for-onclick-listeners-slow", ""

0 commit comments

Comments
 (0)