Javascript Userscript不适用于所有网页
以下脚本适用于大多数静态网站和超链接,但当前在呈现Wiki和其他动态生成内容的工具提示时遇到问题 我甚至在调用Javascript Userscript不适用于所有网页,javascript,jquery,userscripts,tampermonkey,tooltipster,Javascript,Jquery,Userscripts,Tampermonkey,Tooltipster,以下脚本适用于大多数静态网站和超链接,但当前在呈现Wiki和其他动态生成内容的工具提示时遇到问题 我甚至在调用tooltipster()之前使用了一个超时来等待加载所有内容,但这仍然没有呈现工具提示 setTimeout(function() { $('a.tooltipster').tooltipster({ theme: 'tooltipster-punk' }); }, 5000); 它在诸如和之类的网站上运行良好,但在和上则不行 用户脚本 按照的建议,我
tooltipster()
之前使用了一个超时来等待加载所有内容,但这仍然没有呈现工具提示
setTimeout(function() {
$('a.tooltipster').tooltipster({
theme: 'tooltipster-punk'
});
}, 5000);
它在诸如和之类的网站上运行良好,但在和上则不行
用户脚本
按照的建议,我使用了URL API并使用了原始HTML元素属性 我还添加了一种突出显示协议和主机名的方法
// ==UserScript==
// @name Link Hover
// @namespace http://tampermonkey.net/
// @version 1.2.1
// @description Display link.
// @author Mr. Polywhirl
// @match *://*/*
// @require https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.slim.min.js
// @require https://cdnjs.cloudflare.com/ajax/libs/tooltipster/3.3.0/js/jquery.tooltipster.min.js
// @resource tt_CSS https://cdnjs.cloudflare.com/ajax/libs/tooltipster/3.3.0/css/tooltipster.min.css
// @grant GM_addStyle
// @grant GM_getResourceText
// @grant GM_log
// ==/UserScript==
(function() {
'use strict';
GM_addStyle([
GM_getResourceText('tt_CSS'),
// Derived from the tooltipster-punk theme.
'.tooltipster-green {',
' border-radius: 5px; ',
' border-bottom: 3px solid #7EB;',
' background: #2a2a2a;',
' color: #DFE;',
'}',
'.tooltipster-green .tooltipster-content {',
' font-family: Consolas, Menlo, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono, Bitstream Vera Sans Mono, Courier New, monospace, sans-serif;',
' font-size: 14px;',
' line-height: 16px;',
' padding: 8px 10px;',
'}',
'span[class^="tt-protocol-"] {',
' color : #F44;',
'}',
'.tt-protocol-https {',
' color : #0F0 !important;',
'}',
'.tt-hostname {',
' color : #FF0;',
'}'
].join(''));
const tooltipConfig = {
theme: 'tooltipster-green',
contentAsHTML : true,
multiple : true
};
(function($) {
$.fn.setLinkTitle = function() {
this[0].title = $.processLink(this[0].href);
};
$.processLink = function(url) {
try {
var urlObj = new URL(url); // Parse URL as an object.
return url.replace(urlObj.protocol, function(protocol) {
return $('<span>').addClass('tt-protocol-' + protocol.replace(':', '')).text(protocol).prop('outerHTML');
}).replace(urlObj.hostname, function(hostname) {
return $('<span>').addClass('tt-hostname').text(hostname).prop('outerHTML');
});
}
catch (e) {
return url;
}
};
})(jQuery);
$(function() {
createTooltips();
if ('MutationObserver' in window) {
document.addEventListener('DOMNodeInserted', createTooltips, false);
} else {
setInterval(createTooltips, 100);
}
});
function createTooltips() {
$('a:not(.tooltipstered)').each((index, link) => {
$(link).addClass('tooltipster').setLinkTitle();
}).tooltipster(tooltipConfig);
}
})();
/==UserScript==
//@name链接悬停
//@名称空间http://tampermonkey.net/
//@version 1.2.1
//@description显示链接。
//@作者Polywhill先生
//@match*://*/*
//@需要https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.slim.min.js
//@需要https://cdnjs.cloudflare.com/ajax/libs/tooltipster/3.3.0/js/jquery.tooltipster.min.js
//@resource tt_CSShttps://cdnjs.cloudflare.com/ajax/libs/tooltipster/3.3.0/css/tooltipster.min.css
//@grant GM_addStyle
//@grant GM_getResourceText
//@grant GM_log
//==/UserScript==
(功能(){
"严格使用",;
GM_addStyle([
GM_getResourceText(“tt_CSS”),
//源于工具提示朋克主题。
“.tooltipster绿色{”,
'边界半径:5px;',
'边框底部:3px实心#7EB;',
“背景:#2A2A;”,
“颜色:#DFE;”,
'}',
“.tooltipster绿色。tooltipster内容{”,
'字体系列:Console、Menlo、摩纳哥、Lucida Console、Liberation Mono、DejaVu Sans Mono、Bitstream Vera Sans Mono、Courier New、monospace、Sans serif;',
'字体大小:14px;',
'行高:16px;',
'填充:8px 10px;',
'}',
'span[class^=“tt协议-”]{',
'颜色:#F44;',
'}',
“.tt协议https{”,
'颜色:#0F0!重要;',
'}',
“.tt主机名{”,
'颜色:#FF0;',
'}'
].加入(“”);
常量工具配置={
主题:“工具提示绿色”,
contentAsHTML:是的,
多重:对
};
(函数($){
$.fn.setLinkTitle=函数(){
此[0]。标题=$.processLink(此[0]。href);
};
$.processLink=函数(url){
试一试{
var urlObj=新URL(URL);//将URL解析为对象。
返回url.replace(urlObj.protocol,函数(protocol){
返回$('').addClass('tt-protocol-'+protocol.replace(':'','').text(protocol.prop('outerHTML');
}).replace(urlObj.hostname),函数(hostname){
返回$('').addClass('tt-hostname').text(hostname).prop('outerHTML');
});
}
捕获(e){
返回url;
}
};
})(jQuery);
$(函数(){
创建工具提示();
如果('MutationObserver'在窗口中){
document.addEventListener('domandeinserted',createTooltips,false);
}否则{
设置间隔(createTooltips,100);
}
});
函数createTooltips(){
$('a:not(.tooltipstered')。每个((索引,链接)=>{
$(link).addClass('tooltipster').setLinkTitle();
}).tooltipster(tooltipConfig);
}
})();
控制台中有一个错误,指出路径
未定义,因为href
属性为空。这可能是Chrome中的一个bug,但我还没有对它进行适当的调查(现在没有时间)。您可以使用$.fn.setLinkTitle=function(){this[0].title=processLink(this[0].href);}代码>同时,考虑使用API。我还打算使用URL API来提取域:<代码>新URL(URL)。主机名 >与HREF属性不同,HREF属性保证为有效的绝对URL。
// ==UserScript==
// @name Link Hover
// @namespace http://tampermonkey.net/
// @version 1.2.1
// @description Display link.
// @author Mr. Polywhirl
// @match *://*/*
// @require https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.slim.min.js
// @require https://cdnjs.cloudflare.com/ajax/libs/tooltipster/3.3.0/js/jquery.tooltipster.min.js
// @resource tt_CSS https://cdnjs.cloudflare.com/ajax/libs/tooltipster/3.3.0/css/tooltipster.min.css
// @grant GM_addStyle
// @grant GM_getResourceText
// @grant GM_log
// ==/UserScript==
(function() {
'use strict';
GM_addStyle([
GM_getResourceText('tt_CSS'),
// Derived from the tooltipster-punk theme.
'.tooltipster-green {',
' border-radius: 5px; ',
' border-bottom: 3px solid #7EB;',
' background: #2a2a2a;',
' color: #DFE;',
'}',
'.tooltipster-green .tooltipster-content {',
' font-family: Consolas, Menlo, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono, Bitstream Vera Sans Mono, Courier New, monospace, sans-serif;',
' font-size: 14px;',
' line-height: 16px;',
' padding: 8px 10px;',
'}',
'span[class^="tt-protocol-"] {',
' color : #F44;',
'}',
'.tt-protocol-https {',
' color : #0F0 !important;',
'}',
'.tt-hostname {',
' color : #FF0;',
'}'
].join(''));
const tooltipConfig = {
theme: 'tooltipster-green',
contentAsHTML : true,
multiple : true
};
(function($) {
$.fn.setLinkTitle = function() {
this[0].title = $.processLink(this[0].href);
};
$.processLink = function(url) {
try {
var urlObj = new URL(url); // Parse URL as an object.
return url.replace(urlObj.protocol, function(protocol) {
return $('<span>').addClass('tt-protocol-' + protocol.replace(':', '')).text(protocol).prop('outerHTML');
}).replace(urlObj.hostname, function(hostname) {
return $('<span>').addClass('tt-hostname').text(hostname).prop('outerHTML');
});
}
catch (e) {
return url;
}
};
})(jQuery);
$(function() {
createTooltips();
if ('MutationObserver' in window) {
document.addEventListener('DOMNodeInserted', createTooltips, false);
} else {
setInterval(createTooltips, 100);
}
});
function createTooltips() {
$('a:not(.tooltipstered)').each((index, link) => {
$(link).addClass('tooltipster').setLinkTitle();
}).tooltipster(tooltipConfig);
}
})();