N'utilisez pas document.write()
. Il a toutes sortes de restrictions de sécurité (en raison d'abus par les méchants) et est fraught with pitfalls.
si vous essayez de l'utiliser, comme dans votre question, dans un script d'utilisateur; Firefox bloquera généralement la page complètement ou entrera dans un cycle perpétuel - selon le moment où votre script se déclenchera et si vous utiliserez unsafeWindow.stop()
.
Ce type de code fonctionne toujours dans Chrome (pour l'instant), mais reste une mauvaise pratique. Je ne suis pas sûr des autres navigateurs.
L'approche correcte consiste à utiliser des méthodes DOM. Par exemple:
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>';
Pour de meilleures performances, vous pouvez également utiliser:
// @run-at document-start
// @grant unsafeWindow
puis placez un unsafeWindow.stop();
en haut du code userscript.
Re: "How do I rewrite the head content with this solution?"
:
Cet exemple réécrit déjà le <head>
. La nouvelle tête sera:
<head><title>My new page title</title></head>
dans ce cas.
Pour ajouter des éléments de tête supplémentaires, utilisez le code DOM comme:
var newNode = D.createElement ('base');
newNode.href = "http://www.example.com/dir1/page.html";
var targ = D.getElementsByTagName ('head')[0];
targ.appendChild (newNode);
Sauf:
- Il suffit d'utiliser
GM_addStyle()
pour créer facilement <style>
nœuds. Ajouter <script>
nœuds est presque toujours inutile dans votre scénario. Il suffit que votre script utilisateur effectue le traitement JS nécessaire.
- Certaines balises comme
<meta>
seront ajoutées mais pas traitées (en particulier dans Firefox). Selon les paramètres, ceux-ci sont analysés uniquement sur la charge initiale d'un serveur.
Comment réécrire le contenu de la tête avec cette solution? – mykiwi
@mykiwi Exécutez simplement le code. Le code HTML que vous voulez est dans 'D.body.innerHTML = '
Veille ...
'; '. –@mykiwi, voir la réponse mise à jour. –