10

ドキュメントの読み込み中にクラス「nav」を持つ要素が作成されたときに通知を受ける必要があります。グーグルで MutationObservers を見つけて完璧だと思ったのですが、どうもうまくいきません。

// ==UserScript==
// @name        ii-shortcuts
// @namespace   https://github.com/RedHatter
// @include     *
// @version     1
// @run-at document-start
// ==/UserScript==

var observer = new MutationObserver(function(mutations)
{
    mutations.forEach(function(mutation)
    {
        if (mutation.target.getAttribute('class') == 'nav')
            GM_log('nav creation');
    });    
});
observer.observe(document, {subtree: true, attributes: true, attributeFilter: ['class']});    

私も試しました。

// ==UserScript==
// @name        ii-shortcuts
// @namespace   https://github.com/RedHatter
// @include     *
// @version     1
// @run-at document-start
// ==/UserScript==

var observer = new MutationObserver(function(mutations)
{
    mutations.forEach(function(mutation)
    {
        if (mutation.addedNodes[0].getAttribute('class') == 'nav')
            GM_log('nav creation');
    });    
});
observer.observe(document, {subtree: true, childList: true});

しかし、どちらの場合も、ページの読み込み時に「ナビゲーションの作成」ログが発生しました。私は何が欠けていますか?

4

2 に答える 2

0

MutationObserver は、ノードの追加だけでなく、属性の変更やノードの削除など、さまざまな目的で呼び出されます。

mutation.addedNodesそのため、 null を返すことに注意してください。この場合、このコードは失敗します。試す:

if (mutation.addedNodes && mutation.addedNodes[0].getAttribute('class') === 'nav') {
  ...

ミューテーション オブジェクトには、詳細情報を取得するために使用できる 'type' 属性もあります。MDNの API ドキュメントを読みましたか? そこにはいくつかの良い例があります。

于 2013-07-13T17:32:49.103 に答える