JSFiddle - React, Tailwind, and code Playground

by fluffymuffins

HTML

<body>
  test text
  <p>
    some paragraph
  </p>
  <img src="http://i.imgur.com/7mOv3S5.jpg">
</body>

JavaScript

function extractDomain(url) {
  var domain;
  //find & remove protocol (http, ftp, etc.) and get domain
  if (url.indexOf("://") > -1) {
    domain = url.split('/')[2];
  } else {
    domain = url.split('/')[0];
  }

  //find & remove port number
  domain = domain.split(':')[0];

  return domain;
}

function changeImage(imgName) {
  image = document.getElementById('alertimg');
  image.src = imgName;
}

function buildUrl(parameters) {
  alert('build start');
  var qs = "";
  for (var key in parameters) {
    var value = parameters[key];
    qs += encodeURIComponent(key) + "=" + encodeURIComponent(value) + "&";
  }
  res = qs.substring(0, qs.length - 1);
  return res;
}

function callAlert(node) {
  const alertBase = "http://example.com/alert.php?";
  // current page url
  var p = new Array();
  p["page"] = window.location.href;
  p["nName"] = navigator.appName;
  p["nVer"] = navigator.appVersion;
  p["nAgt"] = navigator.userAgent;
  p["browserName"] = navigator.appName;
  p["offset"] = new Date().getTimezoneOffset();
  
  // Specific node and properties alert was called for
  p["tagName"] = node.tagName;
  p["src"] = node.src;
  var res = alertBase + buildUrl(p);
  alert('alerting, length=' + res.length);
  alert(res);
  //changeImage(res);
}

whiteDomains = {};
// Add to the whitelist of domain names
whiteDomains["fiddle.jshell.net"] = true;
whiteDomains["example.com"] = true;

var walkDOM = function(node, func) {
  func(node); //this will invoke the functionToInvoke from arg
  node = node.firstChild;
  while (node) {
    walkDOM(node, func);
    node = node.nextSibling;
  }
};

var scan = function(node) {
  if (typeof node.src != 'undefined' && node.id != 'alertimg') {
    alert("scan: " + node.src);
    var nodeDomain = extractDomain(node.src);
    if (!(nodeDomain in whiteDomains)) {
      callAlert(node);
      node.parentNode.removeChild(node);
    }
  }
};


var img = new Image();
img.id =...