Greasy Fork is available in English.
所有链接都将在新标签页中打开
当前为
// ==UserScript==
// @name 在新标签页中打开链接
// @namespace http://tampermonkey.net/
// @version 2
// @description 所有链接都将在新标签页中打开
// @match *://*/*
// @grant none
// @license MIT
// ==/UserScript==
(function() {
'use strict';
// 定义不受影响的域名数组
var excludedDomains = [
'example.com', // 在此添加任何不受影响的域名
];
// 定义应下载而不是在新标签页中打开的文件扩展名数组
var downloadExtensions = [
'pdf', 'doc', 'docx', 'xls', 'xlsx', 'ppt', 'pptx', 'zip', 'rar', 'tar', 'gz',
];
// 定义应排除或保留的链接属性数组
var linkAttributes = {
exclude: [
'hreflang', 'media', 'ping', 'rel', 'target', 'type', 'onclick', 'onmousedown', 'onmouseup', 'onmouseover', 'onmouseout',
],
preserve: [
'title', 'class', 'id', 'style',
],
};
// 获取页面上的所有链接
var links = document.getElementsByTagName('a');
// 循环遍历链接,并将target="_blank"属性添加到外部链接
for (var i = 0; i < links.length; i++) {
var link = links[i];
// 检查链接是否已经设置为在新标签页中打开
if (link.target === '_blank') {
continue;
}
// 检查链接是否在排除的域名上
var domain = link.hostname.replace(/^www\./, '');
if (excludedDomains.indexOf(domain) !== -1) {
continue;
}
// 检查链接是否为内部链接、mailto链接或tel链接
if (link.hostname === location.hostname || !link.hostname || link.protocol === 'mailto:' || link.protocol === 'tel:') {
continue;
}
// 检查链接是否为应下载的文件
var extension = link.pathname.split('.').pop();
if (downloadExtensions.indexOf(extension) !== -1) {
link.setAttribute('download', '');
continue;
}
// 检查链接是否具有任何被排除的属性
var attributes = link.attributes;
for (var j = 0; j < attributes.length; j++) {
var attributeName = attributes[j].name.toLowerCase();
var attributeValue = attributes[j].value;
// 排除应排除的属性
if (linkAttributes.exclude.indexOf(attributeName) !== -1) {
continue;
}
// 保留应保留的属性
if (linkAttributes.preserve.indexOf(attributeName) !== -1) {
link.setAttribute(attributeName, attributeValue);
continue;
}
// 为外部链接添加target="_blank"属性
if (attributeName === 'href') {
link.setAttribute('target', '_blank');
}
// 复制任何其他属性
link.setAttribute(attributeName, attributeValue);
}
// 处理外部链接的文本内容
var linkText = link.textContent.trim();
if (!linkText) {
continue;
}
// 检查链接文本是否包含URL
if (linkText.indexOf('http://') !== -1 || linkText.indexOf('https://') !== -1) {
continue;
}
}
})();