私はhtml属性titleを使用して、次のようなヒントを設定します。
<a href... title="Go to next chapter">Go</a>
次に、jqueryプラグインはすべての[title]属性を調べて、かなりのツールチップを作成します。非常に単純化された新しいdivが上記のリンク用に作成されます
<div style="position:absolute...">Go to next chapter</div>
問題は、タイトルがユーザーによって編集可能であるため、ユーザーが好きなように書くことができるということです。私は最初、htmlエンコーディングは問題ないと思っていましたが、間違っていたことがわかりました。私が持っている場合
<a id="a" title="<script>alert(10);</script>">Go</a>
その場合、ツールチップdivは次のようになります。
<div style="position:absolute..."><script>alert(10)</script></div>
1)ブラウザが値をクエリするときにtitle属性をデコードするのはなぜですか?
2)どうすればそれを解決できますか?(1つの解決策がダブルHTMLエンコーディングであることは知っていますが、それはひどいです)
テスト方法:このコードを検討してください
<html>
<body>
<!-- encoding once, this doesn't work -->
<a id="a" title="<script>alert(10);</script>">atitle</a>
<!-- encoding twice, this works -->
<a id="b" title="&lt;script&gt;alert(10);&lt;/script&gt">btitle</a>
<script>
function w(x){ document.write(x.attributes["title"].value);}
w(a); // shows alert
w(b); // outputs it correctly into the page
</script>
</body>
</html>