使用 grease/tampermonkey,如何在 Thesaurus.com 打开 Dictionary.com 当前查看的定义?
Using grease/tampermonkey, how can I have the currently viewed definition at Dictionary.com open at Thesaurus.com?
使用 Greasemonkey 或 Tampermonkey,当 the links circled in red are clicked.
时,如何在 Thesaurus.com 打开 Dictionary.com 当前查看的定义(反之亦然)
我看到我可以使用 window.location.pathname
来检索“/browse/test”或正在搜索的任何单词,然后我可以将其放在相反的 link 的主机名上。
Thesaurus.comlink的HTML:<a href="http://www.thesaurus.com/" data-linkid="qxnxzj">Thesaurus.com</a>
Dictionary.comlink的HTML:<a href="http://www.dictionary.com/" data-linkid="tqks0v">Dictionary.com</a>
所以我打算用 document.querySelectorAll("a[href='http://www.thesaurus.com']");
或 document.querySelectorAll('[data-linkid=qxnxzj]');
select
我担心 selection 的后一种方法,以防数据-linked 被公司的 web 开发人员更改。
但是,最终,我仍然不确定如何实现它。我是监听 document
上的所有点击,还是只监听 <a>
标签等?最有效的方法是什么?
此外,如何在 ctrl+click 时在新选项卡中打开这些 link,或者在 shift+click 时在新选项卡中打开 window?目前,它在同一浏览器选项卡中打开 ctrl+clicked 和 shift+clicked links。
以下代码能够完全实现我问题中列出的所有目标:
// ==UserScript==
// @name Restore links behavior at Thesaurus.com
// @namespace http://tampermonkey.net/
// @version 0.1
// @description try to take over the world!
// @author You
// @match *://www.thesaurus.com/*
// @match *://www.dictionary.com/*
// @run-at document-end
// @grant none
// ==/UserScript==
(function() {
'use strict';
document.querySelectorAll('[data-linkid]').forEach(el => el.removeAttribute('data-linkid'));
document.addEventListener('click', function(e) {
var link = e.target.closest('a');
//var link = e.target.closest('#content a'); // limit to the #content area
var path = window.location.pathname; // /browse/myword
if (link && link.getAttribute('href') != '#') {
e.stopPropagation();
}
if (link && link.getAttribute('href') == 'http://www.thesaurus.com/') {
link.setAttribute('href', 'http://www.thesaurus.com' + path);
}
else if (link && link.getAttribute('href') == 'http://www.dictionary.com/') {
link.setAttribute('href', 'http://www.dictionary.com' + path);
}
}, true);
})();
使用 Greasemonkey 或 Tampermonkey,当 the links circled in red are clicked.
时,如何在 Thesaurus.com 打开 Dictionary.com 当前查看的定义(反之亦然)我看到我可以使用 window.location.pathname
来检索“/browse/test”或正在搜索的任何单词,然后我可以将其放在相反的 link 的主机名上。
Thesaurus.comlink的HTML:<a href="http://www.thesaurus.com/" data-linkid="qxnxzj">Thesaurus.com</a>
Dictionary.comlink的HTML:<a href="http://www.dictionary.com/" data-linkid="tqks0v">Dictionary.com</a>
所以我打算用 document.querySelectorAll("a[href='http://www.thesaurus.com']");
或 document.querySelectorAll('[data-linkid=qxnxzj]');
我担心 selection 的后一种方法,以防数据-linked 被公司的 web 开发人员更改。
但是,最终,我仍然不确定如何实现它。我是监听 document
上的所有点击,还是只监听 <a>
标签等?最有效的方法是什么?
此外,如何在 ctrl+click 时在新选项卡中打开这些 link,或者在 shift+click 时在新选项卡中打开 window?目前,它在同一浏览器选项卡中打开 ctrl+clicked 和 shift+clicked links。
以下代码能够完全实现我问题中列出的所有目标:
// ==UserScript==
// @name Restore links behavior at Thesaurus.com
// @namespace http://tampermonkey.net/
// @version 0.1
// @description try to take over the world!
// @author You
// @match *://www.thesaurus.com/*
// @match *://www.dictionary.com/*
// @run-at document-end
// @grant none
// ==/UserScript==
(function() {
'use strict';
document.querySelectorAll('[data-linkid]').forEach(el => el.removeAttribute('data-linkid'));
document.addEventListener('click', function(e) {
var link = e.target.closest('a');
//var link = e.target.closest('#content a'); // limit to the #content area
var path = window.location.pathname; // /browse/myword
if (link && link.getAttribute('href') != '#') {
e.stopPropagation();
}
if (link && link.getAttribute('href') == 'http://www.thesaurus.com/') {
link.setAttribute('href', 'http://www.thesaurus.com' + path);
}
else if (link && link.getAttribute('href') == 'http://www.dictionary.com/') {
link.setAttribute('href', 'http://www.dictionary.com' + path);
}
}, true);
})();