获取[object XrayWrapper [object HTMLDivElement]]对象的innerHTML

use*_*375 2 javascript userscripts

在我的用户脚本中,我创建了一个document.createElement的钩子,我使用的代码是Brock adams在下面的帖子中提供的解决方案

使用用户脚本记录网页动态创建的DOM元素

现在当我在firefox中运行这个用户脚本并打印这样的elemin LogNewTagCreations ()方法console.log(elem)时,我得到了[object XrayWrapper [object HTMLDivElement]]这种格式的输出.现在,我怎样才能得到innerHTML标签或整个标签这样的属性<div>Sometext</div>,这样我可以得到innerHTML从这个

Wit*_*iko 5

看起来XrayWrapperGreasemonkey用来包装DOM元素是一个非常不完美的包装器,因为它并不真正支持innerHTMLgetter/setter.

我给你写了一个简单的递归innerHTML实现,如下所示:html(element).它忽略了除了元素,属性和文本节点之外的所有东西,但它应该服务于它的目的,只要它XrayWrapper支持我在函数中使用的其他DOM属性.

var html = (function() {
  var ELEMENT = this.Node?Node.ELEMENT_NODE:1,
         TEXT = this.Node?Node.TEXT_NODE:   3;
  return function html(el, outer) {
    var i = 0, j = el.childNodes, k = outer?"<" + (m = el.nodeName.toLowerCase()) + attr(el) + ">":"",
        l = j.length, m, n;
    while(i !== l) switch((n = j[i++]).nodeType) {
      case ELEMENT: k += html(n, true); break;
      case TEXT:    k += n.nodeValue;
    } return k + (outer?"</" + m + ">":"");
  }; function attr(el) {
    var i = 0, j = el.attributes, k = new Array(l = j.length), l, m;
    while(i !== l) k[i] = (m = j[i++].nodeName) + "=\"" + el.getAttribute(m) + "\"";
    return (l?" ":"") + k.join(" ");
  }
})();
Run Code Online (Sandbox Code Playgroud)