chrome扩展内容脚本无法访问iFrame
我想在谷歌阅读器上做一个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添加一个事件侦听器-例如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、共
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,我也不知道为什么。另请参阅