<html>
<head>
<title>Initial Title</title>
<script>
var QueryString = function() {
  // Allows access to query parameters on the URL; e.g., given a URL like:
  //    http://<server>/my.html?test=123&bob=123
  // Parameters can then be accessed via QueryString.test or QueryString.bob.
  var params = {};
  // RegEx to split out values by &.
  var r = /([^&=]+)=?([^&]*)/g;
  // Lambda function for decoding extracted match values. Replaces '+' with
  // space so decodeURIComponent functions properly.
  function d(s) { return decodeURIComponent(s.replace(/\+/g, ' ')); }
  var match;
  while (match = r.exec(window.location.search.substring(1)))
    params[d(match[1])] = d(match[2]);
  return params;
}();

var mimeType = QueryString.mimetype;

function inject() {
  var child = document.createElement('div');
  child.innerHTML = '<object type="' + mimeType + '" id="plugin" border=1>' +
                    '  <b>You should not see this text!</b>' +
                    '</object>';
  document.getElementById('content').appendChild(child);
  // Plugins are loaded synchronously during layout, so the plugin has either
  // been loaded or blocked at this point.
  var plugin = document.getElementById('plugin');
  try {
    // All Pepper plugins support postMessage().
    // If postMessage is undefined, the plugin is not loaded.
    if (plugin.postMessage == undefined) {
      document.title = 'Not Loaded';
      return;
    }
    
    plugin.postMessage('hello');
    // If we do not get an exception, the Pepper plugin is loaded.
    document.title = 'Loaded';
  } catch (e) {
    var errorMessage = 'Unexpected Exception: ' + e.toString(); 
    document.title = errorMessage;
    console.log(errorMessage);
  }
}
</script>
</head>
<body onload='inject();'>
<div id='content'></div>
</body>
</html>
