Greasy Fork is available in English.
选中一个网址后在新标签页跳转
当前为
// ==UserScript==
// @name 检测网址跳转
// @namespace http://tampermonkey.net/
// @version 1.3
// @description 选中一个网址后在新标签页跳转
// @author 小楠
// @match *://*/*
// @icon https://t.tutu.to/img/kjcbA
// @license MIT
// ==/UserScript==
let isSelecting = false;
let selectedText = '';
let hasPattern = false;
let showedPopup = false;
let currentPageUrl = window.location.href;
let isDetectionEnabled = true; // 默认开启检测
let isProcessed = false;
let lastSelectedUrl = '';
document.addEventListener('mousedown', function () {
isSelecting = true;
});
document.addEventListener('mouseup', function () {
isSelecting = false;
if (window.getSelection().toString()) {
selectedText = window.getSelection().toString();
hasPattern = selectedText.includes('http://') || selectedText.includes('https://') || selectedText.includes('www.');
} else {
selectedText = '';
hasPattern = false;
}
checkAndPrompt();
});
let checkAndPrompt = function () {
if (hasPattern &&!showedPopup && window.location.href === currentPageUrl && isDetectionEnabled) {
let urlRegex = /(https?:\/\/[^\s]+)/g;
let urls = selectedText.match(urlRegex);
if (urls) {
let urlToCopy = urls[0];
console.log('Detected URL:', urlToCopy);
if (urlToCopy!== lastSelectedUrl) {
navigator.clipboard.writeText(urlToCopy).then(() => {
let confirmMessage = `是否要跳转 ${urlToCopy}?`;
if (confirm(confirmMessage)) {
window.open(urlToCopy, '_blank');
// 取消选中的文本
if (window.getSelection) {
if (window.getSelection().empty) { // Chrome
window.getSelection().empty();
} else if (window.getSelection().removeAllRanges) { // Firefox
window.getSelection().removeAllRanges();
}
// 尝试禁用鼠标事件短暂时间,防止误触发
document.body.style.pointerEvents = 'none';
setTimeout(() => {
document.body.style.pointerEvents = 'auto';
}, 500);
}
isProcessed = true;
lastSelectedUrl = urlToCopy;
} else {
showedPopup = true;
}
});
}
}
} else if (!hasPattern || window.location.href!== currentPageUrl ||!isDetectionEnabled) {
showedPopup = false;
isProcessed = false;
lastSelectedUrl = '';
}
};
document.addEventListener('selectionchange', checkAndPrompt);