chrome扩展内容脚本无法访问iFrame

chrome扩展内容脚本无法访问iFrame,iframe,google-chrome-extension,content-script,Iframe,Google Chrome Extension,Content Script,我想在谷歌阅读器上做一个chrome扩展,我发现了一个问题。内容脚本无法访问iFrame。对于所有n,window.frames[n]=未定义。我有这个“所有框架”:在manifest.json中为true。或者有人可以告诉我如何在每篇文章下面添加一个按钮。谢谢大家! 通过快速查看Google Reader呈现的HTML,IFRAME中唯一的按钮似乎是Google Plus+1按钮-所有其他按钮都不在IFRAME中。所以你不必担心IFRAME 我假设现有的按钮是出现在每篇文章下面的按钮:+1、共

我想在谷歌阅读器上做一个chrome扩展,我发现了一个问题。内容脚本无法访问iFrame。对于所有n,window.frames[n]=未定义。我有这个“所有框架”:在manifest.json中为true。或者有人可以告诉我如何在每篇文章下面添加一个按钮。谢谢大家!

通过快速查看Google Reader呈现的HTML,IFRAME中唯一的按钮似乎是Google Plus+1按钮-所有其他按钮都不在IFRAME中。所以你不必担心IFRAME

我假设现有的按钮是出现在每篇文章下面的按钮:+1、共享、电子邮件、保持未读状态、添加标签

如果您想在现有的文章按钮中添加一个新按钮,那么只需枚举DOM,特别是“entry actions”DIV类,并在每个文章中添加一个新的SPAN,比如说元素/按钮

我怀疑(但不确定)读者可能会用新文章动态更新DOM。如果是这种情况,您可能需要跟踪添加到DOM中的新文章,以便再次添加按钮。为此,为DomainNodeInserted添加一个事件侦听器-例如

document.addEventListener('DOMNodeInserted', onNodeInserted, false);
更新:

无法看到“.entry actions”类的原因是它是动态添加的

下面是一个非常基本的示例。这将监视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>');
}
var定时器;
document.addEventListener('DomainNodeInserted',onNodeInserted,false);
函数onNodeInserted(e)
{
if(定时器)清除超时(定时器);
计时器=设置超时(“addButtons()”,250);
}
函数addButtons()
{
log(“添加按钮”);
var$actions=$(“.entry actions”).filter(函数(){
返回$(this.find('.myclass')。长度==0;
});
$actions.append(“”);
}

突变事件被斩首,相反,你现在应该看看突变观察者,这里有一个库可以帮助他们(我自己从未尝试过)。。。。这是一个已知的bug。。。评论中有一些变通方法可能会对您有所帮助。我甚至无法使用javascript选择“entry actions”DIV,我也不知道为什么。另请参阅