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

标签 javascript userscripts

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

Log a web page's dynamically-created, DOM elements with a userscript

现在,当我在 Firefox 中运行此用户脚本并打印 elem 时在LogNewTagCreations ()像这样的方法 console.log(elem)我得到的输出为 [object XrayWrapper [object HTMLDivElement]]以这种格式。现在我怎样才能得到innerHTML标签或整个标签的属性,如下所示 <div>Sometext</div>这样我就可以得到innerHTML由此而来

最佳答案

Greasemonkey 用于包装 DOM 元素的 XrayWrapper 似乎是一个不完美的包装器,因为它并不真正支持 innerHTML getter/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(" ");
  }
})();

关于javascript - 获取[object XrayWrapper [object HTMLDivElement]]对象的innerHTML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10684962/

相关文章:

javascript - 我在设置 cookie 时遇到问题

javascript - 正则表达式使用javascript限制汉字

javascript - 使用 sh 测试用户脚本

javascript - 我制作的用户脚本部分有效。有什么解决办法吗?

javascript - 如何在JqGrid中动态绑定(bind)行和列?

javascript - 对象 #<Navigator> 没有方法 'getUserMedia'

javascript - 在两个单独的脚本之间共享变量

javascript - JSON 文件的 XMLHttpRequest 在 Chrome 中完美运行,但在 Firefox 中不完美

google-chrome - 来自 Google Chrome 中用户脚本的跨源 XHR

javascript - 重叠时如何滚动div