これが私のHTMLです。
<a>View it in your browser</a>
<div id="html">
<h1>Doggies</h1>
<p style="color:blue;">Kitties</p>
</div>
JavaScriptを使用して、リンクのhref
属性が、innerHTML
のソースがdiv#html
?
私は基本的に、JavaScriptを除き、同じ変換を行います here (base64チェックボックスをオンにして)。
data-URI MIMEタイプtext/html
の場合、これらの形式のいずれかである必要があります。
data:text/html,<HTML HERE>
data:text/html;charset=UTF-8,<HTML HERE>
Base-64エンコードは必要ありません。コードにéé
などの非ASCII文字が含まれている場合、charset=UTF-8
を追加する必要があります。
次の文字をエスケープする必要があります。
#
-FirefoxおよびOperaは、この文字をハッシュのマーカーとして解釈します(location.hash
のように)。%
-この文字は、文字をエスケープするために使用されます。この文字をエスケープして、副作用が発生しないことを確認します。さらに、アンカータグにコードを埋め込む場合は、次の文字もエスケープする必要があります。
" and/or '
-引用符は属性の値をマークします。&
-アンパーサンドは、HTMLエンティティをマークするために使用されます。<
および>
do 必要ないエスケープHTML属性内。ただし、リンクをHTMLに埋め込む場合は、これらもエスケープする必要があります(%3C and %3E
)Data-URIのサイズを気にしない場合、最も簡単な方法は encodeURIComponent
を使用することです:
var html = document.getElementById("html").innerHTML;
var dataURI = 'data:text/html,' + encodeURIComponent(html);
サイズが重要な場合は、連続するすべての空白を削除することをお勧めします(HTMLに<pre>
要素/ style が含まれていない限り、これは安全に実行できます)。次に、重要な文字のみを置き換えます。
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;