Не использовать document.write()
. Он имеет все виды ограничений безопасности (из-за злоупотребления плохими парнями) и составляет fraught with pitfalls.
если вы попытаетесь использовать его, как в своем вопросе, в usercript; Firefox, как правило, либо полностью останавливает страницу, либо переходит в постоянный Connecting...
, а затем перезагружает цикл - в зависимости от того, когда запускается ваш сценарий, и используете ли вы unsafeWindow.stop()
.
Этот вид кода по-прежнему работает в Chrome (на данный момент), но остается плохой практикой. Не уверен в других браузерах.
Правильный подход заключается в использовании методов DOM. Например:
var D = document;
var newDoc = D.implementation.createHTMLDocument ("My new page title");
window.content = newDoc;
D.replaceChild (
D.importNode (newDoc.documentElement, true),
D.documentElement
);
D.body.innerHTML = '<h1>Standby...</h1>';
Для повышения производительности, вы можете также использовать:
// @run-at document-start
// @grant unsafeWindow
, а затем поместить unsafeWindow.stop();
в верхней части кода userscript.
Re: "How do I rewrite the head content with this solution?"
:
Этот пример уже переписывает <head>
. Новая голова будет:
<head><title>My new page title</title></head>
в этом случае.
Для добавления дополнительных элементов головки, используйте DOM код, как:
var newNode = D.createElement ('base');
newNode.href = "http://www.example.com/dir1/page.html";
var targ = D.getElementsByTagName ('head')[0];
targ.appendChild (newNode);
За исключением:
- Просто используйте
GM_addStyle()
легко создавать <style>
узлы.
- Добавление
<script>
узлов почти всегда бессмысленно в вашем сценарии. Просто сделайте свою учетную запись необходимой обработкой JS.
- Некоторые теги, такие как
<meta>
, будут добавлены, но не обработаны (особенно в Firefox). В зависимости от параметров они обрабатываются только при начальной загрузке с сервера.
Как переписать содержимое главы с помощью этого решения? – mykiwi
@mykiwi Просто запустите код. HTML, который вы хотите, находится в 'D.body.innerHTML = '
Резервный ...
'; '. –@mykiwi, см. Обновленный ответ. –