2

私のユーザースクリプトでは、document.createElement のフックを作成しました。使用したコードは、以下の投稿で Brock adams によって提供されたソリューションです。

Web ページの動的に作成された DOM 要素をユーザー スクリプトでログに記録する

このユーザースクリプトをFirefoxで実行し、このようにeleminLogNewTagCreations ()メソッドを出力すると、この形式でconsole.log(elem)出力が得られます。[object XrayWrapper [object HTMLDivElement]]これから取得できるように、このようにタグまたはタグ全体のプロパティを取得するにはどうすればよいですinnerHTML<div>Sometext</div>innerHTML

4

1 に答える 1

5

DOM 要素をラップするXrayWrapperために Greasemonkey によって使用されるは、 getter/setterを実際にサポートしていないため、完全なラッパーではないようです。innerHTML

私は単純化した再帰的なinnerHTML実装を書きました。次のように呼び出しますhtml(element)。要素、属性、およびテキスト ノード以外はすべて無視されますが、関数で使用する他のDOM 属性XrayWrapperが でサポートされている限り、その目的を果たすはずです。

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(" ");
  }
})();
于 2012-05-29T16:04:52.520 に答える