您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Pops up a floating div when you hover over a link, containing the target page!
当前为
// ==UserScript== // @name Hover Preview // @namespace HP // @description Pops up a floating div when you hover over a link, containing the target page! // @include * // @version 0.0.1.20150213035046 // ==/UserScript== // TODO: // Don't act if the target is a file-type. i.e. we don't want to be prompted // to save a zip file just because we hovered on it. // KNOWN UNFIXABLE BUG: // Damnit some pages break out of the iframe! Don't try to use this on // StackOverflow links! // if (window.document != document) { // return; // Don't run in iframes // } // Quite nice on apache file listings of .jpegs, but a bit slow. Ideally pre-load hoverable images? // Could be a bit heavy. It depends on the page... // A different bookmarklet to turn all "links to images" into "images" would be nice. :) var focusReactionTime = 1500; var unfocusReactionTime = 1500; var focus = undefined; var lastFocus = undefined; var timer = null; var myPopup; var myFrame; var isOverPopup = false; function checkFocus() { if (focus) { // if (focus == lastFocus) { // User has definitely been here a while showPreviewWindow(focus); // } else { // } // lastFocus = focus; } } function eekAMouse(evt) { if (evt.currentTarget.tagName !== "A") { return; } if (!focus) { focus = evt.currentTarget; // setTimeout('checkFocus();',focusReactionTime); // Hack to bring the popup back immediately if we've gone back to the same link. if (myFrame && focus.href && myFrame.href == focus.href) { showPreviewWindow(focus,evt); } else { if (timer) { clearTimeout(timer); } timer = setTimeout(checkFocus,focusReactionTime); } } else { window.status = "Already focused on a link wtf!"; } } function phewMouseGone(evt) { if (evt.currentTarget.tagName !== "A") { return; } focus = undefined; if (timer) { clearTimeout(timer); } // TESTING: Don't hide the popup if mouse is currently over the popup! timer = setTimeout(clearPopup,unfocusReactionTime); } function clearPopup(e) { if (isOverPopup || focus) return; if (myPopup) { // myPopup.parentNode.removeChild(myPopup); // myPopup = undefined; // eww cache it! myPopup.style.display = 'none'; } } // DONE: If the user clicks a link, this isn't really a hover, so we should not // activate and just let the user's click be processed! function aClick(evt) { focus = undefined; } function createPopup() { // Create frame myPopup = document.createElement('DIV'); /** Seems style does not work for Konqueror this way. **/ myPopup.innerHTML = "<STYLE type='text/css'> iframe.preview { color: #ff8822; background-color: #ff0000; margin: 0px; padding: 2px; border: 2px solid white; text-align: center; } </STYLE>" + "<IFRAME class='preview' width='"+(window.innerWidth*0.75)+"' height='"+(window.innerHeight*0.75)+"' src='about:blank'></IFRAME>"; myPopup.addEventListener("mouseover", function(evt) { isOverPopup=true; }, false); myPopup.addEventListener("mouseout", function(evt) { isOverPopup=false; setTimeout(clearPopup,unfocusReactionTime); }, false); document.documentElement.appendChild(myPopup); /* myPopup.style.border = "4px solid white"; myPopup.style.backgroundColor = "#004400"; myPopup.style.margin = "4px"; myPopup.style.padding = "4px"; */ myPopup.style.position = "fixed"; myPopup.style.right = "12px"; myPopup.style.bottom = "12px"; myPopup.style.zIndex = "10000"; myFrame = myPopup.getElementsByTagName('IFRAME')[0]; } function showPreviewWindow(link,evt) { if (!myFrame) { createPopup(); } myPopup.style.display = ''; if (!myFrame.src || myFrame.src != link.href) myFrame.src = link.href; } function init() { for (var i=0;i<document.links.length;i++) { var link = document.links[i]; /** Apparently deprecated. **/ // link.onmouseover = eekAMouse; // link.onmouseout = phewMouseGone; /** The new way: **/ link.addEventListener("mouseover", eekAMouse, false); link.addEventListener("mouseout", phewMouseGone, false); link.addEventListener("click", aClick, false); // link.addEventListener("mousemove", function(evt) { locate(evt); }, true); } } init(); // window.document.checkFocus = checkFocus;