docs: function createFrame (bodyContent, callbackId, callback) {
      var Proto = function Frame () {},
          api = new Proto(),
          domElement = scope.document.createElement('iframe');
  
      domElement.id = 'OTPlugin_frame_' + $.uuid().replace(/\-+/g, '');
      domElement.style.border = '0';
  
      try {
        domElement.style.backgroundColor = 'rgba(0,0,0,0)';
      } catch (err) {
        // Old IE browsers don't support rgba
        domElement.style.backgroundColor = 'transparent';
        domElement.setAttribute('allowTransparency', 'true');
      }
  
      domElement.scrolling = 'no';
      domElement.setAttribute('scrolling', 'no');
  
      // This is necessary for IE, as it will not inherit it's doctype from
      // the parent frame.
      var frameContent = '<!DOCTYPE html><html><head>' +
                        '<meta http-equiv="x-ua-compatible" content="IE=Edge">' +
                        '<meta http-equiv="Content-type" content="text/html; charset=utf-8">' +
                        '<title></title></head><body>' +
                        bodyContent +
                        '<script>window.parent["' + callbackId + '"](' +
                          'document.querySelector("object")' +
                        ');</script></body></html>';
  
      var wrappedCallback = function() {
        OTPlugin.log('LOADED IFRAME');
        var doc = domElement.contentDocument || domElement.contentWindow.document;
  
        if ($.env.iframeNeedsLoad) {
          doc.body.style.backgroundColor = 'transparent';
          doc.body.style.border = 'none';
  
          if ($.env.name !== 'IE') {
            // Skip this for IE as we use the bookmarklet workaround
            // for THAT browser.
            doc.open();
            doc.write(frameContent);
            doc.close();
          }
        }
  
        if (callback) {
          callback(
            api,
            domElement.contentWindow,
            doc
          );
        }
      };
  
      scope.document.body.appendChild(domElement);
  
      if($.env.iframeNeedsLoad) {
        if ($.env.name === 'IE') {
          // This works around some issues with IE and document.write.
          // Basically this works by slightly abusing the bookmarklet/scriptlet
          // functionality that all browsers support.
          domElement.contentWindow.contents = frameContent;
          /*jshint scripturl:true*/
          domElement.src = 'javascript:window["contents"]';
          /*jshint scripturl:false*/
        }
  
        $.on(domElement, 'load', wrappedCallback);
      } else {
        setTimeout(wrappedCallback, 0);
      }
  
      api.reparent = function reparent (target) {
        // document.adoptNode(domElement);
        target.appendChild(domElement);
      };
  
      api.element = domElement;
  
      return api;
    }