这是我的HTML:
<a>View it in your browser</a>
<div id="html">
<h1>Doggies</h1>
<p style="color:blue;">Kitties</p>
</div>
如何使用JavaScript使我的链接的href
属性指向一个以div#html
的innerHTML
为源的base64编码网页?
我基本上想要做与这里相同的转换(选中了base64复选框),只不过是在JavaScript中。
这是我的HTML:
<a>View it in your browser</a>
<div id="html">
<h1>Doggies</h1>
<p style="color:blue;">Kitties</p>
</div>
如何使用JavaScript使我的链接的href
属性指向一个以div#html
的innerHTML
为源的base64编码网页?
我基本上想要做与这里相同的转换(选中了base64复选框),只不过是在JavaScript中。
MIME类型为text/html
的data-URI需要采用以下格式之一:
data:text/html,<HTML HERE>
data:text/html;charset=UTF-8,<HTML HERE>
不必使用Base-64编码。如果您的代码包含非ASCII字符,例如éé
,则必须添加charset=UTF-8
。
以下字符必须转义:
#
- Firefox和Opera将此字符解释为哈希标记(如location.hash
)。%
- 此字符用于转义字符。 转义此字符确保不会发生任何副作用。此外,如果您想在锚标签中嵌入代码,则还应转义以下字符:
"和/或'
- 引号标记属性值。&
- 号用于标记HTML实体。<
和>
不需要转义。 但是,如果您要在HTML中嵌入链接,这些也应该被转义(%3C和%3E
)如果您不介意数据URI的大小,则最简单的方法是使用encodeURIComponent
:
var html = document.getElementById("html").innerHTML;
var dataURI = 'data:text/html,' + encodeURIComponent(html);
如果尺寸很重要,最好删除所有连续的空白(这可以安全地完成,除非HTML包含<pre>
元素/样式)。然后,只替换有意义的字符: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;
<pre>
元素/样式)。然后,只替换有意义的字符:
data:text/html,charset=UTF-8
应该是data:text/html;charset=UTF-8
。 - Braden Bestreplace
方法? - Web_Designer.replace
代码块之前的部分中已经说明了。 - Rob W