0

Я пишу расширение chrome, которое останавливает загрузку страницы для определенного веб-сайта. Как мне сделать это мое содержание сценарному-х впрыскивается на странице и вызываетJavascript показывает некоторый контент после остановки загрузки окна

window.stop() 

Это работает, как ожидалось, и я вижу пустой белый веб-страницы. Теперь я хочу показать пользовательское сообщение на этой пустой белой странице, как мне это сделать.

Это то, что я пытался до сих пор, после вызова window.stop() У меня есть эта строка:

document.body.innerHTML += '<div style="position:absolute;width:100%;height:100%; z-index:100;background:#000;"></div>'; 

но выдает ошибку

Uncaught TypeError: Cannot read property 'innerHTML' of null 

Я проверил DOM и его имеет в нем тег тела. Я не уверен, что случилось.

+1

Возможно, лучше использовать 'webRequest' для перенаправления на страницу в вашем расширении, чем использовать сценарий контента таким образом. – Xan

+0

Не знаю о webRequest, и это определенно выглядит интересно, можете ли вы написать небольшой фрагмент кода, демонстрирующий его использование в этом случае? – sublime

ответ

2

Я предполагаю, что вы блокируете сайт, вводя сценарий контента в document_start и решении есть ли блокировать.

Лучшим подходом было бы полностью отменить первоначальный запрос и перенаправить его на собственную страницу ошибок.

webRequest API можно сделать:

chrome.webRequest.onBeforeRequest.addListener(
    function(details) { 
     if(/* condition based on details */) { 
     // The file might need to be in web_accessible_resources 
     return {redirectUrl: chrome.runtime.getURL("my_error.html")}; 
     } 
    }, 
    {urls: ["<all_urls>"], types: ["main_frame"]}, 
    ["blocking"] 
); 

Примечание: это будет вызывать тестовый код при каждом запросе навигации; это может замедлить работу. Если у вас есть определенный список сайтов, вы можете поместить их в параметр urls фильтра, чтобы получить лучшую производительность.

Вам потребуются разрешения хоста, охватывающие сайты, которые вы хотите заблокировать (или "<all_urls>", если вам это может понадобиться), "webRequest" и "webRequestBlocking".

1

Вы всегда можете использовать window.document.write().

Вы код будет выглядеть ...

document.write("<div style='position:absolute;width:100%;height:100%; z-index:100;background:#000;'></div>") 
Смежные вопросы