Chromium Code Reviews| Index: chrome/browser/resources/synthetic_middleclick.js |
| diff --git a/chrome/browser/resources/synthetic_middleclick.js b/chrome/browser/resources/synthetic_middleclick.js |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..b784d100e7bc97937ee36dbf28daaf2611110121 |
| --- /dev/null |
| +++ b/chrome/browser/resources/synthetic_middleclick.js |
| @@ -0,0 +1,38 @@ |
| +// Copyright 2016 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +(function() { |
| + |
| +var middleButtonMouseDownTarget = null; |
| + |
| +document.addEventListener('mousedown', function(e) { |
| + if (e.button == 1) |
| + middleButtonMouseDownTarget = e.path[0]; |
| +}, true); |
| + |
| +document.addEventListener('mouseup', function(e) { |
| + if (e.button != 1) |
| + return; |
| + |
| + if (e.path.length > 0 && e.path[0] == middleButtonMouseDownTarget) |
| + middleButtonMouseDownTarget.dispatchEvent(new MouseEvent('click', e)); |
| + |
| + middleButtonMouseDownTarget = null; |
| +}, true); |
| + |
| +// If js sends a synthetic click event to an element like what we do |
| +// here the default handler runs for that event. Now if user middle |
| +// clicks on an element Chrome by default runs the default behavior |
| +// (i.e. opening the link in a new tab) with firing no click event. |
| +// See crbug.com/255. This file does send that synthetic click for |
| +// middle click to temporary fix the expected behavours in some |
| +// click handlers. However, this will cause yet another tab to open |
| +// if the target is a link as the default handler runs for this synthetic |
| +// as well if the event is not prevented. |
|
Dan Beam
2016/06/02 19:18:33
yeah, sorry, this still doesn't make much sense to
|
| +window.addEventListener('click', function(e) { |
| + if (e.button == 1 && !e.isTrusted) |
| + e.preventDefault(); |
| +}); |
| + |
| +})(); |