2012-03-10 7 views
0

GoogleリーダーでChrome拡張機能を作成したいが問題が見つかりました。コンテンツスクリプトはiframeにアクセスできません。すべてのnについて、window.frames [n] =未定義。そして、私はこれを持っています "all_frames":manifest.jsonの真実。または、誰かが各記事の下にボタンを追加する方法を教えてくれるかもしれません。ありがとうございました!chrome extension content scriptがiframeにアクセスできない

+0

も参照してくださいhttp://stackoverflow.com/q/35571106/32453 – rogerdpack

答えて

1

GoogleリーダーのレンダリングされたHTMLを簡単に見てみると、IFRAME内の唯一のボタンはGoogle Plus +1ボタンのように見えます。他のボタンはすべてIFRAMEにありません。 IFRAMEについて心配する必要はありません。

私は、既存のボタンが+1、共有、電子メール、未読のままにする、タグを追加するの各記事の下に表示されるボタンであると仮定しています。

既存の記事ボタンに新しいボタンを追加するには、DOMを列挙するだけです。具体的には、「エントリアクション」DIVクラスを追加し、要素/ボタンとともに新しいSPANを追加します。

私はReaderが新しい記事でDOMを動的に更新するかもしれないと思っていますが、わかりません。このような場合は、新しい記事をDOMに追加する必要があるため、ボタンをもう一度追加する必要があります。これを行うには、DOMNodeInsertedのイベントリスナーを追加します。

document.addEventListener('DOMNodeInserted', onNodeInserted, false); 

UPDATE:それは動的に追加されるので、あなたが「.ENTRY・アクション」クラスを参照してくださいすることはできません

理由があります。

これは非常に基本的な動作例です。これはDOMを監視し、 ".myclass" SPANボタンを持たないentry-actions DIVが見えるときにそれを追加します。

拡張機能にjqueryを組み込む必要があります。この例では、jquery-1.7.1.min.jsを使用しました。例を切り取って貼り付ける場合は、foo.pngというアイコンファイルも必要です。

manifest.jsonを

{ 
    // Required 
    "name": "Foo Extension", 
    "version": "0.0.1", 

    // Recommended 
    "description": "A plain text description", 
    "icons": { "48": "foo.png" }, 
    //"default_locale": "en", 

    // Pick one (or none) 
    "browser_action": { 
    "default_icon": "Foo.png", // optional 
    "default_title": "Foo Extension"  // optional; shown in tooltip 
    }, 

    "permissions": [ "http://*/", "https://*/", "tabs" ], 

    "content_scripts": [ 
    { 
     "matches": ["http://*/*", "https://*/*"], 
     "js": ["jquery-1.7.1.min.js", "content_script.js" ], 
     "run_at": "document_idle" 
    } 
    ] 
} 

content_script.js

var timer; 

document.addEventListener('DOMNodeInserted', onNodeInserted, false); 

function onNodeInserted(e) 
{ 
    if(timer) clearTimeout(timer); 
    timer = setTimeout("addButtons()", 250); 
} 

function addButtons() 
{ 
    console.log('add buttons'); 
    var $actions = $(".entry-actions").filter(function() { 
     return $(this).find('.myclass').length === 0; 
    }); 
    $actions.append('<span class="myclass"><a href="javascript:alert(\'hey! Im a foo extension injected button!\');return false;">My button</a></span>'); 
} 
+0

突然変異イベントは、あなたが見てしなければならない代わりに、断頭突然変異の観察者は今、それらを手伝ってくれる図書館を募集しています(自分でそれを試したことはありません).... http://code.google.com/p/mutation-summary/ – PAEz

+0

これは知っているバグです..... http ://code.google.com/p/chromium/issues/detail?id = 20773 ...あなたに役立つコメントにいくつかの回避策があります。 – PAEz

+0

私は「entry-actions」DIVをjavascriptで選択することさえできませんし、その理由もわかりません。 – user1070827

関連する問題