Google リーダーで Chrome 拡張機能を作成したいのですが、問題が見つかりました。コンテンツ スクリプトは iframe にアクセスできません。すべての n について、window.frames[n] = 未定義。そして、私はこの "all_frames": true を manifest.json に持っています。または、各記事の下にボタンを追加する方法を誰かが教えてくれます。ありがとうございました!
1 に答える
Google リーダーのレンダリングされた HTML をざっと見てみると、IFRAME にある唯一のボタンは Google Plus +1 ボタンのように見えます。他のすべてのボタンは IFRAME にありません。したがって、IFRAME について心配する必要はありません。
既存のボタンは、各記事の下に表示されるボタン (+1、共有、電子メール、未読のままにする、タグを追加) であると想定しています。
既存の記事ボタンに新しいボタンを追加する場合は、DOM を列挙するだけです。具体的には、「エントリ アクション」DIV クラスを列挙し、要素/ボタンを含む新しい SPAN を各記事に追加します。
Reader が新しい記事で DOM を動的に更新する可能性があるのではないかと思います (確かではありません)。この場合、ボタンを再度追加できるように、DOM に追加される新しい記事を追跡する必要がある場合があります。これを行うには、DOMNodeInserted のイベント リスナーを追加します。
document.addEventListener('DOMNodeInserted', onNodeInserted, false);
アップデート:
「.entry-actions」クラスが表示されないのは、動的に追加されるためです。
これは非常に基本的な動作例です。これは DOM を監視し、".myclass" SPAN ボタンを持たない entry-actions DIV を検出すると、それを追加します。
これを機能させるには、拡張機能に jquery を含める必要があります。この例では jquery-1.7.1.min.js を使用しました。例をカット アンド ペーストする場合は、foo.png というアイコン ファイルも必要になります。
マニフェスト.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>');
}