2015-03-01 3 views
1

Я пытаюсь запустить прослушиватель webrequest, когда вы нажимаете кнопку запуска в расширении. Однако он не работает. Когда я добавляю слушателя webrequest вне функции, он работает, однако. Вот мой код:chrome.webrequest в функции прослушивания событий

manifest.json

{ 
    "manifest_version": 2, 

    "name": "SimplyFocused", 
    "description": "This extension will stop procrastination.", 
    "version": "1.0", 
    "options_page": "options.html", 

    "browser_action": { 
    "default_icon": "icon.png", 
    "default_popup": "popup.html" 
    }, 
    "permissions": [ 
    "webRequest", 
    "webRequestBlocking", 
    "<all_urls>" 
    ], 
    "background": { 
    "scripts": ["background.js"] 
    } 
} 

popup.html

<!doctype html> 
<html> 
    <head> 
    <title>Simply Focused</title> 
    <link rel="stylesheet" href="bootstrap.min.css"> 
    <link rel="stylesheet" href="style.css"> 
    <script src="background.js"></script> 
    <script src="popup.js"></script> 
    </head> 
    <body id="popup"> 
     <button class="btn btn-default" id="start">Start</button> 
    </body> 
</html> 

popup.js

document.addEventListener('DOMContentLoaded', function() { 
     document.getElementById('start').addEventListener('click', startBlock); 
    }); 

background.js

if (localStorage.getItem("blocked") == null) { 
     localStorage.setItem("blocked", JSON.stringify([])); 
    } 

    function startBlock() { 
     var blockedSites = ["*://www.yahoo.com/*"]; 
     console.log(blockedSites); 
     chrome.webRequest.onBeforeRequest.addListener(
      function(details){console.log(details); return {cancel: true};}, 
      {urls: ["*://www.yahoo.com/*"]}, 
      ["blocking"]); 
    } 

    // chrome.webRequest.onBeforeRequest.addListener(
    // function(details){console.log(details); return {cancel: true};}, 
    // {urls: ["*://www.yahoo.com/*"]}, 
    // ["blocking"]); 

Когда я раскомментировать комментарий часть в background.js, блокирующие работ. Я предполагаю, что это связано с тем, что webrequest не основывается, но я не уверен. Благодаря!

ответ

0

Всплывающие окна и фон не совпадают. Попробуйте startBlock функции фон доступа с использованием chrome.extension.getBackgroundPage() метода:

document.addEventListener('DOMContentLoaded', function() { 
    document.getElementById('start').addEventListener('click', function() { 
     chrome.extension.getBackgroundPage().startBlock(); 
    }); 
}); 
+0

Спасибо так много! Это работает. Я новичок в javascript, что происходит в моем исходном коде? Поскольку он регистрировал заблокированныеSites, но он не добавлял слушателя. – scsmncao

+0

Подумайте о всплывающих окнах и фонах, как о принципиально разных страницах. Таким образом, в всплывающем окне нет функции 'startBlock'. – dfsq

Смежные вопросы