Одним из решений может быть преобразование каждой ссылки на странице в желаемый формат.
Это можно сделать с помощью Greasemonkey в Firefox и пользовательского сценария UserScript.
В качестве альтернативы Tampermonkey for Chrome также может работать, но я не использую его, поэтому не могу это проверить.
Недостатком этого решения будет то, что вы захотите включить его только тогда, когда это необходимо, так как если оставить его включенным для обычного просмотра веб-страниц, это приведет к искажению макета элементов страницы, таких как верхние и нижние колонтитулы и боковые панели.
Скачать Greasemonkey для Firefox ИЛИ Скачать Tampermonkey для Chrome
Следующий пользовательский код может быть сохранен в файл * .user.js (например, tmpscript.user.js), а затем этот файл можно перетащить в Firefox после установки Greasemonkey для установки пользовательского кода.
// ==UserScript==
// @name Transform All Links
// @namespace myscripts
// @description Transforms <a=href>link</a> to { link | <a=href>href</a> }
// @include http*
// @version 1
// @grant none
// ==/UserScript==
try{
transformAnchors();
}catch(err){
alert("error#" + err.number + " name: " + err.name + "\n"
+ "message: " + err.message + "\n"
+ "description: " + err.description);
var errmsg = "";
for (atr in err) {
errmsg = errmsg + atr + " = " + err[atr] + "<br>\n";
}
alert(errmsg);
}
function transformAnchors() {
//get every anchor node
var anchornodes = document.getElementsByTagName("A");
//transform every anchor
for (var i=0; i<anchornodes.length; ++i){
//grab the current anchor node
anchornode = anchornodes[i];
//ignore erroneous nodes with no parent
if (anchornode.parentNode == undefined || anchornode.parentNode == null) continue;
//add text sibling before anchor node : { <a=href>link</a>
anchornode.parentNode.insertBefore(document.createTextNode("{ "),anchornode);
//create styled anchor node to preserve styling
styledanchornode = document.createElement("A");
styledanchornode.setAttribute("class",anchornode.getAttribute("class"));
styledanchornode.setAttribute("style",anchornode.getAttribute("style"));
styledanchornode.setAttribute("title",anchornode.getAttribute("title"));
//put styled anchor node before anchor node
anchornode.parentNode.insertBefore(styledanchornode,anchornode);
//move all anchor node children to before anchor node inside styled anchor node : { link <a=href></a>
while (anchornode.hasChildNodes()){
styledanchornode.appendChild(anchornode.childNodes[0]);
}
//remove styling from anchor node
anchornode.removeAttribute("style");
anchornode.removeAttribute("class");
anchornode.removeAttribute("title");
//add text sibling before anchor node : { link | <a=href></a>
anchornode.parentNode.insertBefore(document.createTextNode(" | "),anchornode);
//add href text child inside anchor node : { link | <a=href>href</a>
anchornode.appendChild(document.createTextNode(anchornode.href));
//add text sibling after anchor node : { link | <a=href>href</a> }
anchornode.parentNode.insertBefore(document.createTextNode(" }"),anchornode.nextSibling);
//increment index to compensate for extra styled anchor node
++i
}
}