2015-08-23 4 views
0

Итак, я пытаюсь сделать что-то вроде родительского контроля. Когда я запускаю расширение в первый раз, он отлично работает, но когда я его снова использую, элементы не скрывают, целая страница загружается, а затем перенаправляется, я хочу скрыть все элементы на странице, а затем перенаправить, я не использую onBeforeRequest Я хочу использовать его также с поиском google, и я не знаю, могу ли я использовать параметр регулярных выражений внутри URL. Мой манифест в порядке, я запускаю скрипт контента в документе document_start.Скрыть все элементы перед загрузкой расширения хрома

background.js

var activeTabUrl; 
var regex = /http:\/\/www.youporn.com\// 

chrome.tabs.onUpdated.addListener(function (tabId, changeInfo, tab) { 
chrome.tabs.query({ 
    active: true, 
    currentWindow: true 
}, function (arrayOfTabs) { 

    activeTabUrl = arrayOfTabs[0].url; 
}); 

if (activeTabUrl.match(regex)) { 

    chrome.tabs.update({ 
     url: "http://google.com/" 
    }) 
} else { 
    chrome.tabs.sendMessage(tabId, { 
     action: "show_my_page" 
    }, function (response) {}); 
} 
}); 

myscript.js (content_script)

_ini(); 

function _ini() { 
    document.getElementsByTagName("html")[0].style.display = "none"; 

    chrome.extension.onMessage.addListener(function (msg, sender, sendResponse) { 
     if (msg.action == 'show_my_page') { 
      document.getElementsByTagName("html")[0].style.display = "block"; 
     } 
    }); 
} 
+0

Можете ли вы попробовать вставить «' by script? –

+1

Да, это не работает. Самое странное, что когда я открыл инспектор в хроме, он работает каждый раз. – Syeth

+0

, возможно, в момент выполнения скрипта сценария содержимого документ еще не готов. Попробуйте заменить _init() на document.addEventListener ('DOMContentLoaded', _init); и посмотреть, работает ли он. – Surely

ответ

0

Это неправильный подход, но первый, почему он терпит неудачу.

Если вы выполняете команду document_start, то единственным узлом, существующим в dom, будет узел document. Еще не html.

Да, вы могли бы ожидать появления узла html, но это очень круто. Ваша цель - предотвратить навигацию в первую очередь - и для функциональности блокировщика есть webrequest API (который, IIRC, был специально реализован для AdBlock).

Вот минимальный пример из самих Документов

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

Вы также можете переадресовать, что с redirectUrl вместо cancel в ответ блокировки. См. Также CatBlock для полного образца.

+0

Я хочу проверить слова из файла. Я не знаю, есть ли возможность достичь этого с помощью «URL-адресов». – Syeth

+0

Вот как работает AdBlock в Chrome. Вы можете посмотреть [источник ABP] (https://github.com/adblockplus/adblockpluschrome). – Xan