在我的用户脚本中,我创建了一个document.createElement的钩子,我使用的代码是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
答案 0 :(得分:5)
看起来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(" ");
}
})();