{jpm} Как заменить любую страницу на свою?
Как я могу заменить любую страницу, например http://google.com/ на мою страницу (я не хочу перенаправлять), включая <head>
?
Я попробовал это:
// Import the page-mod API
var pageMod = require("sdk/page-mod");
// Create a page-mod
// It will run a script whenever a ".io" URL is loaded
// The script replaces the page contents with a message
pageMod.PageMod({
include: "*.io",
contentScript: 'document.body.innerHTML = ' +
' "<h1>Page matches ruleset</h1>";'
});
Но это не заменит всю страницу. Я хочу заменить head
тоже. Я хочу заменить страницу до загрузки страницы...
1 ответ
С помощью document.head.innerHTML
Вы можете сослаться на заголовок html-страницы, что позволяет установить в ней содержимое.
Также стоит отметить, что API-интерфейс page-mod может принимать несколько аргументов в виде массива строковых литералов, а также может импортировать сценарии из каталога данных.
И, наконец, вы можете настроить запуск скрипта до загрузки страницы, установив опцию page-mod contentScriptWhen
до значения start
или же ready
,
согласно документации:
"start": загрузка сценариев содержимого сразу после вставки элемента документа в DOM, но до загрузки самого содержимого DOM
"ready": загрузка сценариев содержимого после загрузки содержимого DOM, соответствующего событию DOMContentLoaded
"end": загрузка сценариев содержимого после загрузки всего содержимого (DOM, JS, CSS, изображений) в момент возникновения события window.onload
Таким образом, ваш пример изменения заголовка и тела перед загрузкой страницы будет похож на приведенный ниже:
// Import the page-mod API
var pageMod = require("sdk/page-mod");
// Create a page-mod
// It will run a script whenever a ".org" URL is loaded
// The script replaces the page contents with a message
pageMod.PageMod({
include: "*.io",
contentScript: ['document.body.innerHTML = ' +
' "<h1>foo</h1>"',
'document.head.innerHTML = ' +
' "<style>h1 {color:blue;}</style>";'],
contentScriptWhen: "start"
});
Также стоит отметить, что этот скрипт может работать лучше для некоторых страниц, когда contentScriptWhen
установлен в ready
иначе изменения могут не распространяться на все элементы на странице.