aboutsummaryrefslogtreecommitdiffstats
path: root/content_scripts/injected.coffee
diff options
context:
space:
mode:
authorStephen Blott2017-12-14 14:08:35 +0000
committerStephen Blott2017-12-14 14:12:08 +0000
commitf2d7e185c704e3cf8f6ca0c9d3d4da2498610475 (patch)
tree965411d361a2c3405d94015a3b8dc9aab6225ca8 /content_scripts/injected.coffee
parent797e25231b306403167f5a3f90d6cea6d9ba6dda (diff)
downloadvimium-f2d7e185c704e3cf8f6ca0c9d3d4da2498610475.tar.bz2
Detect click listeners for link hints.
This is a simpler version of #1167. It detects clickable elements with listeners added with `addEventListener()`. It includes some of @mrmr1993's ideas from #1167 (in fact, it's mostly those ideas tweaked into a slightly different form).
Diffstat (limited to 'content_scripts/injected.coffee')
-rw-r--r--content_scripts/injected.coffee20
1 files changed, 20 insertions, 0 deletions
diff --git a/content_scripts/injected.coffee b/content_scripts/injected.coffee
new file mode 100644
index 00000000..d833d09c
--- /dev/null
+++ b/content_scripts/injected.coffee
@@ -0,0 +1,20 @@
+# The code in `injectedCode()`, below, is injected into the page's own execution context.
+#
+# This is based on method 2b here: http://stackoverflow.com/a/9517879, and
+# @mrmr1993's #1167.
+
+window.vimiumOnClickAttributeName = "_vimium-has-onclick-listener"
+
+injectedCode = (vimiumOnClickAttributeName) ->
+ # Note the presence of "click" listeners installed with `addEventListener()` (for link hints).
+ _addEventListener = Element::addEventListener
+
+ Element::addEventListener = (type, listener, useCapture) ->
+ @setAttribute vimiumOnClickAttributeName, "" if type == "click"
+ _addEventListener.apply this, arguments
+
+script = document.createElement "script"
+script.textContent = "(#{injectedCode.toString()})('#{vimiumOnClickAttributeName}')"
+(document.head || document.documentElement).appendChild script
+script.remove()
+