Converts Javascript links that open new windows into regular old links
当前为
// ==UserScript==
// @name Javascript Link Fixer
// @namespace DoomTay
// @description Converts Javascript links that open new windows into regular old links
// @version 1.0.0
// @grant none
// ==/UserScript==
var links = document.querySelectorAll("a[href *= 'javascript:']");
var paramTable = {};
paramTable["open"] = 0;
for (var l = 0; l < links.length; l++)
{
if(links[l].href.indexOf("void") > -1) continue;
var hrefSplitter = /javascript:(\S+)\((\S+(?:,(?: )\S+)*)?\)/.exec(links[l].href);
if(hrefSplitter == null) continue;
var functionName = hrefSplitter[1];
var sourceCode = uneval(window[functionName]);
var functionBody = sourceCode.substring(sourceCode.indexOf("{") + 1,sourceCode.indexOf("}")).trim();
var arguments = /\((\S+(?:,(?: )\S+)*)?\)/.exec(sourceCode)[1].split(/\s*,\s*/);
var params = hrefSplitter[2].split(",");
var containedFunctions = (/(\S+)\(/g.exec(functionBody));
containedFunctions.shift();
for(var s = 0; s < containedFunctions.length; s++)
{
var statementName = containedFunctions[s];
var statementParams = new RegExp(statementName + "\\(((?:.+|\".+\"))\\)").exec(functionBody)[1];
for(var p = 0; p < arguments.length; p++)
{
statementParams = statementParams.replace(new RegExp(arguments[p],"g"), params[p]);
}
statementParams = eval("[" + statementParams + "]");
if(paramTable.hasOwnProperty(statementName))
{
links[l].href = statementParams[paramTable[statementName]];
break;
}
}
}