■
// ==UserScript== // @name embed typograffit // @namespace http://www.relucks.org/ // @include http://twitter.com/ // ==/UserScript== (function() { var loaded = {} url2img(document) document.addEventListener("DOMNodeInserted", function(e){ if (e.target.tagName) { setTimeout(function() { url2img(e.target) }, 100) } }, false) function url2img(doc) { var re_t = new RegExp('^http://typograffit\.com/posts/compose/') $X('.//a[@href]', doc).forEach(function(a) { if (re_t.test(a.href) && !loaded[a.href]) { loaded[a.href] = true replace_typograffit(a) } }) } function replace_typograffit(a) { var img = document.createElement('img') img.src = a.href.replace('compose', 'getImage') img.style.maxWidth = '400px' a.appendChild(img) } // http://gist.github.com/raw/3242/1a7950e033a207efcfc233ae8d9939b676bdbf46 // simple version of $X // $X(exp); // $X(exp, context); function $X (exp, context) { context || (context = document); var expr = (context.ownerDocument || context).createExpression(exp, function (prefix) { return document.createNSResolver(context)(prefix) || (document.contentType == "application/xhtml+xml") ? "http://www.w3.org/1999/xhtml" : ""; }); var result = expr.evaluate(context, XPathResult.ANY_TYPE, null); switch (result.resultType) { case XPathResult.STRING_TYPE : return result.stringValue; case XPathResult.NUMBER_TYPE : return result.numberValue; case XPathResult.BOOLEAN_TYPE: return result.booleanValue; case XPathResult.UNORDERED_NODE_ITERATOR_TYPE: // not ensure the order. var ret = [], i = null; while (i = result.iterateNext()) ret.push(i); return ret; } return null; } })()
DOMNodeInserted とな。スクリプトを動かすページが twitter.com だから DOMNodeInserted にしたのかなあ。サイト側でページの継ぎ足しの機能を実装してるから。AutoPagerize じゃなくて。