Javascript Link Fixer

Converts Javascript links that open new windows into regular old links

目前為 2016-01-10 提交的版本,檢視 最新版本

// ==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;
		}
	}
}

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址