Javascript Link Fixer

Converts Javascript links that open new windows into regular old links

当前为 2016-01-10 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name Javascript Link Fixer
  3. // @namespace DoomTay
  4. // @description Converts Javascript links that open new windows into regular old links
  5. // @version 1.0.0
  6. // @grant none
  7.  
  8. // ==/UserScript==
  9.  
  10. var links = document.querySelectorAll("a[href *= 'javascript:']");
  11.  
  12. var paramTable = {};
  13. paramTable["open"] = 0;
  14.  
  15. for (var l = 0; l < links.length; l++)
  16. {
  17. if(links[l].href.indexOf("void") > -1) continue;
  18. var hrefSplitter = /javascript:(\S+)\((\S+(?:,(?: )\S+)*)?\)/.exec(links[l].href);
  19. if(hrefSplitter == null) continue;
  20. var functionName = hrefSplitter[1];
  21. var sourceCode = uneval(window[functionName]);
  22. var functionBody = sourceCode.substring(sourceCode.indexOf("{") + 1,sourceCode.indexOf("}")).trim();
  23. var arguments = /\((\S+(?:,(?: )\S+)*)?\)/.exec(sourceCode)[1].split(/\s*,\s*/);
  24. var params = hrefSplitter[2].split(",");
  25. var containedFunctions = (/(\S+)\(/g.exec(functionBody));
  26. containedFunctions.shift();
  27. for(var s = 0; s < containedFunctions.length; s++)
  28. {
  29. var statementName = containedFunctions[s];
  30. var statementParams = new RegExp(statementName + "\\(((?:.+|\".+\"))\\)").exec(functionBody)[1];
  31. for(var p = 0; p < arguments.length; p++)
  32. {
  33. statementParams = statementParams.replace(new RegExp(arguments[p],"g"), params[p]);
  34. }
  35. statementParams = eval("[" + statementParams + "]");
  36. if(paramTable.hasOwnProperty(statementName))
  37. {
  38. links[l].href = statementParams[paramTable[statementName]];
  39. break;
  40. }
  41. }
  42. }