2017-01-24 7 views
1

Я пытаюсь сделать расширение chrome, которое блокирует iframes. У меня есть файл content.js, в котором есть код javascript, но он не выполняется. Вот мой manifest.json:javascript in extension не работает

{ 
"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' с вашими совпадениями), если вы не нуждаетесь ** в. jQuery - это 85kiB свернутого кода. Это существенное бремя, с помощью которого можно оседлать * каждую страницу *. Что из нас, у кого есть 100 вкладок? Хотя возможно, вам действительно нужно * загрузить jQuery, более вероятно, что вы делаете это для удобства сохранения пары/нескольких сотен символов в вашем собственном коде, не используя ванильный 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.

Возможно, вы даже захотите настроить тайм-аут или опрос на запрос iframes, так как некоторые из них могут быть созданы асинхронно, то есть после загрузки содержимого объявления.