Voici mon HTML:
<a>View it in your browser</a>
<div id="html">
<h1>Doggies</h1>
<p style="color:blue;">Kitties</p>
</div>
Comment utiliser JavaScript pour que l'attribut href
de mon lien pointe vers une page Web encodée en base64 dont la source est le innerHTML
de div#html
?
Je veux essentiellement faire la même conversion ici (avec la case à cocher base64 cochée) sauf en JavaScript.
A data-URI avec le type MIME text/html
doit être dans l'un de ces formats:
data:text/html,<HTML HERE>
data:text/html;charset=UTF-8,<HTML HERE>
L'encodage Base-64 n'est pas nécessaire. Si votre code contient des caractères non ASCII, tels que éé
, charset=UTF-8
doit être ajouté.
Les caractères suivants doivent être échappés:
#
- Firefox et Opera interprètent ce caractère comme le marqueur d'un hachage (comme dans location.hash
).%
- Ce caractère est utilisé pour échapper les caractères. Échappez à ce personnage pour vous assurer qu'aucun effet secondaire ne se produit.En outre, si vous souhaitez incorporer le code dans une balise d'ancrage, les caractères suivants doivent également être échappés:
" and/or '
- Les guillemets marquent la valeur de l'attribut.&
- L'esperluette est utilisée pour marquer les entités HTML.<
et >
ne pas besoin d'être échappé à l'intérieur d'un attribut HTML . Cependant, si vous allez intégrer le lien dans le code HTML, vous devez également les échapper (%3C and %3E
)Si la taille de l'URI de données ne vous dérange pas, la méthode la plus simple consiste à utiliser encodeURIComponent
:
var html = document.getElementById("html").innerHTML;
var dataURI = 'data:text/html,' + encodeURIComponent(html);
Si la taille est importante, vous feriez mieux de supprimer tous les espaces blancs consécutifs (cela peut être fait en toute sécurité, sauf si le HTML contient un <pre>
élément/ style ). Ensuite, ne remplacez que les caractères significatifs:
var html = document.getElementById("html").innerHTML;
html = html.replace(/\s{2,}/g, '') // <-- Replace all consecutive spaces, 2+
.replace(/%/g, '%25') // <-- Escape %
.replace(/&/g, '%26') // <-- Escape &
.replace(/#/g, '%23') // <-- Escape #
.replace(/"/g, '%22') // <-- Escape "
.replace(/'/g, '%27'); // <-- Escape ' (to be 100% safe)
var dataURI = 'data:text/html;charset=UTF-8,' + html;