2017-01-04 77 views
1

以下是「data:」URI,將其加載到瀏覽器中。Chrome與Firefox Javascript行爲

data:text/html,<script>alert("#")</script> 

我得到alert()在Chrome中執行,但在Firefox中沒有執行。 Firefox刪除「#」字符和所有以下字符。 我如何使FF提醒(「#」)?

更新:我瞭解「#」碎片部分,但問題更像是「爲什麼Chrome會忽略」碎片「情況,並將其視爲正常字符,而FF沒有?」。

回答

2

數據URI的數據部分必須進行編碼,#作爲文字字符是不允許的。來自Wikipedia page

數據,用逗號分開(,)。數據是以字符表示的八位字節序列。數據URI中的允許字符是現代英文字母的小寫字母和大寫字母的ASCII字符以及阿拉伯數字。用任何其他字符表示的八位字節必須進行百分比編碼,如%26中的&符號(&)。

...其中引用RFC3986

所以你的數據URI應該是:

data:text/html,%3Cscript%3Ealert(%22%23%22)%3C%2Fscript%3E 

...這在Chrome和Firefox的工作:

<a href="data:text/html,%3Cscript%3Ealert(%22%23%22)%3C%2Fscript%3E">Click here</a>

你可以使用JavaScript的的URI數據例如:

var dataUri = "data:text/html," + encodeURIComponent('<script>alert("#")</script>'); 
1

A #在URL中具有特殊含義(表示片段部分的開始)。您必須將其編碼爲%23以將其包含爲數據。

相關問題