2017-01-24 80 views
1

我想做一个铬扩展,阻止iframes。我有一个content.js文件,它有JavaScript代码,但它不执行。 这里是我的manifest.json:JavaScript在扩展不工作

{ 
"manifest_version":2, 
"name":"Ad Killer", 
"description":"A Basic program for blocking ads", 
"version":"0.1", 
"background":{ 
    "scripts":[ 
    "background.js" 
    ] 
}, 
"content_scripts":[ 
    { 
     "matches":[ 
     "<all_urls>" 
     ], 
     "js":[ 
     "jquery.js" 
     ] 
    } 
], 
"browser_action":{ 
    "default_icon":"ad128.png", 
    "default_title":"Ad Killer" 
} 
} 

Cotent.js:

var elems = document.getElementsByTagName("iframe"); 

for (var i = 0, max = elems.length; i < max; i++) { 
    elems[i].hidden = true; 

我的问题是,有没有什么办法让JavaScript的在content.js工作?任何帮助,将不胜感激。

+0

*请不要将jQuery加载到每个**页面('content_scripts'和''matches''),除非**需要**。 jQuery是最小化代码的85kB。这是一个巨大的负担,鞍*每页*。我们这些拥有100个标签的人是什么意思?虽然有可能你真的*需要*来加载jQuery,但是为了便于通过不使用vanilla JavaScript在自己的代码中保存几百或几百个字符,更有可能这样做。如果是这种情况(我们无法知道),那么从用户的角度来看,这样做是非常糟糕的折衷。 – Makyen

回答

3

您的清单正在为您访问的每个页面添加jquery.js。你只需要将content.js添加到你的“content_scripts”数组中。假设content.js是在相同的位置,你的manifest.json:

"content_scripts":[ 
    { 
     "matches":[ 
     "<all_urls>" 
     ], 
     "js":[ 
     "jquery.js", 
     "content.js" 
     ] 
    } 
], 

此外,你要确保代码当DOM准备运行。由于您使用jQuery:

$(document).ready(function() { 
    //your code here 
}) 

有用于定义当脚本运行清单选项,但我从来没有与他们很成功,你可以在这里探索他们:https://developer.chrome.com/extensions/content_scripts看到run_at属性。

而且您甚至可能需要设置超时或轮询来查询iframe,因为它们中的一些可能是异步创建的,也就是加载广告内容之后。