Firefox
Up one level2008/01/27
左ダブルクリックでリンク先をバックグラウンドのタブで開くuserChrome.js
nさんが、こういう操作をしていて使いやすそうに感じたので、userChrome.js用の拡張として作ってみました。
リンクを左ダブルクリックすると、そのリンクをバックグラウンドの新規タブで開きます。 200ms以内に二回目のクリックがなければ、同じタブでそのリンクを開きます。
作りが結構適当なので、もし使ってみようと思う方は、注意して使ってください。 (いくつかの不具合を確認しています)
(function() { var gTimer = null; function findLink(element) { switch (element.tagName) { case 'A': return element; case 'B': case 'I': case 'SPAN': case 'SMALL': case 'STRONG': case 'EM': case 'BIG': case 'SUB': case 'SUP': case 'IMG': case 'S': var parent = element.parentNode; return parent && findLink(parent); default: return null; } } function click(element, view) { var e = document.createEvent('MouseEvents'); e.initMouseEvent('click', true, true, view, 0, 0, 0, 0, 0, false, false, false, false, 0, element); return !element.dispatchEvent(e); } function openTab(href) { if ('TreeStyleTabService' in window) TreeStyleTabService.readyToOpenChildTab(gBrowser.selectedTab, false); return gBrowser.addTab(href); } function findFrames(frame) { var frames = frame.frames; var fs = {}; for (var i = 0, len = frames.length; i < len; ++i) { var f = frames[i]; fs[f.name] = f; var children = findFrames(f); for (k in children) { var f = children[k]; fs[f.name] = f; } } return fs; } function followLink(args) { var link = args.link; var newTab = args.newTab; var window = args.window; var activate = args.activate; var href = link.href; var target = link.target; if (newTab) { var tab = openTab(href); if (activate) { gBrowser.selectedTab = tab; } } else if (!target || target == '_self') { window.location.href = href; } else { switch (target) { case '_top': window.top.location.href = href; break; case '_parent': window.parent.location.href = href; break; case '_blank': gBrowser.selectedTab = openTab(href); break; default: var frames = findFrames(window.top); var frame = frames[target]; if (frame) { frame.location.href = href; } else { gBrowser.selectedTab = openTab(href); } } } } gBrowser.mPanelContainer.addEventListener('click', function(e) { if (e.button == 0 && !e.ctrlKey && !e.altKey && !e.shiftKey && !e.metaKey) { var link = findLink(e.target); if (link) { var href = link.href; if (href && href.match(/^(https?|ftp):\/\//)) { e.preventDefault(); e.stopPropagation(); if (!gTimer) { gTimer = setTimeout(function() { try { if (click(link, e.view)) { followLink({ link: link, window: e.view, newTab: false }); } clearTimeout(gTimer); } finally { gTimer = null; } }, 200); } } } } }, false); gBrowser.mPanelContainer.addEventListener('dblclick', function(e) { if (gTimer) { try { clearTimeout(gTimer); var link = findLink(e.target); if (link) { var href = link.href; if (href.match(/^(https?|ftp):\/\//) && click(link, e.view)) { followLink({ link: link, window: e.view, newTab: true, activate: false }); } } } finally { gTimer = null; } } }, false); })();
- Category(s)
- Firefox
- The URL to Trackback this entry is:
- http://dev.ariel-networks.com/Members/mizyo/5de630eb30af30ea30c330af30ea30f330af5148309230c330af30e930a630f3306e30bf958b304fuserchrome.js/tbping