Javascript Userscript不适用于所有网页

Javascript Userscript不适用于所有网页,javascript,jquery,userscripts,tampermonkey,tooltipster,Javascript,Jquery,Userscripts,Tampermonkey,Tooltipster,以下脚本适用于大多数静态网站和超链接,但当前在呈现Wiki和其他动态生成内容的工具提示时遇到问题 我甚至在调用tooltipster()之前使用了一个超时来等待加载所有内容,但这仍然没有呈现工具提示 setTimeout(function() { $('a.tooltipster').tooltipster({ theme: 'tooltipster-punk' }); }, 5000); 它在诸如和之类的网站上运行良好,但在和上则不行 用户脚本 按照的建议,我

以下脚本适用于大多数静态网站和超链接,但当前在呈现Wiki和其他动态生成内容的工具提示时遇到问题

我甚至在调用
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);
    }
})();