私はPageMod
、Web ページに読み込まれた画像要素を処理するために使用する小さな Firefox アドオンに取り組んでいます。jQuery を使用した Web 上の例を見てきましたが、すべての Web ページにコンテンツ スクリプトを追加しているため、jQuery を追加すると取り返しのつかない損害が発生する可能性があります。
Firefox がサポートしているので、 AndrewVermieMutationObserver
のおかげで次のことを試みました。
content.js
var observer = new MutationObserver(function(mutations) {
mutations.forEach(function(mutation) {
if(mutation.tagName == "IMG")
{
//I'm not sure this object can be treated as a DOM Element (?)
mutation.src = "http://s6.tinypic.com/15npphk_th.jpg";
}
for (var i = 0; i < mutation.addedNodes.length; ++i) {
var node = mutation.addedNodes[i],
matches = [].slice.call(node.querySelectorAll('img'));
for (var j = 0; j < matches.length; ++j) {
var img = matches[j];
img.src = "http://s6.tinypic.com/15npphk_th.jpg";
}
}
});
});
var config = { attributes: true, childList: true, subtree: true, characterData: true};
observer.observe(window.document, config);
var elements = document.getElementsByTagName("img");
var elementsLength = elements.length;
for (var i = 0; i < elementsLength; i++)
{
elements[i].src = "http://s6.tinypic.com/15npphk_th.jpg";
}
main.js
pageMod.PageMod({
include: "*",
contentScriptWhen: 'ready',
contentScriptFile: [self.data.url("content.js")],
onAttach: //...
}
});
何が起こるのですか :
- http://imgur.com/にアクセスしてください
- 画像が動的に読み込まれるまでスクロールを開始します
- 変更されていないことに注意してください
私はいつもconsole.log()
、画像にカーソルを合わせたときに.tagName
のみ表示p
されます。#text
必要なもの
スクリプトが挿入された Web ページ内に動的にロードされた各要素を反復処理し、要素の属性を変更できるようにします。
純粋な JavaScript を使用して、または使用せずにそれを行うことができれば、それはMutationObserver
本当に盛り上がります。
それ以外の場合は、ページのすべての要素をもう一度繰り返すためにいくつかの要素が読み込まれていることがわかった場合、それは問題ありませんが、膨らみません。
私は物事を少し片付けたことを願っています。
どんな助けでも大歓迎です。