1

IE8 に問題があり、javascript を使用して新しいウィンドウを開き、特殊文字を含むパラメーターを送信します。

<a href="javascript:oWin('/html/de/4664286/printregistrationcontent.html?12-security question&#61;Wie hei&#223;t Ihr Lieblingsrestaurant','PRINT',800,600);" class="print">Seite drucken</a>

問題は文字 'ß' (シャープ S) です。ご覧のとおり、上記の文字列はアンチ XSS によるエンコードです。このリンクは FF と IE6 で機能しますが、IE8 は URL パラメーターをコード 65*** の文字として送信しています (正確な値はわかりません)。開始ウィンドウでは、四角形のみが表示されます (65000+ の文字は印刷できないため)。

また、HTML エンコーディングの代わりに URL エンコーディングを使用しようとしました

<a href="javascript:oWin('/html/de/4664286/printregistrationcontent.html?12-security question%3DWie hei%C3%9Ft Ihr Lieblingsrestaurant','PRINT',800,600);" class="print">Seite drucken</a>

FF または IE6 でこのリンクをクリックすると、期待どおりに動作しますが、IE8 はサーバーへの「ß」の送信に失敗するため、間違った方法で返されます。この URL を IE8 に貼り付けても機能しますが、javascript でウィンドウを開いた場合は機能しません。

Javascript 関数 oWin は次のように定義されます。

function oWin(url,title,sizeH,sizeV) { 
winHandle = top.open(url,title,'toolbar=no,directories=no,status=yes,scrollbars=yes,menubar=no,resizable=no,width='+sizeH+',height='+sizeV);
if(navigator.appVersion.indexOf("MSIE 3",0)==-1) id = setTimeout('winHandle.focus()',1000);
} 

誰かが理由を探す場所を知っている場合は、これに答えてください.

amfaさんありがとうございます

4

1 に答える 1

1

すべてのブラウザーが同じ方法で href 属性をエンコードするわけではありません。これが問題になる可能性があります。onclickコードを属性に移動すると、異なる方法で処理され、ブラウザー間でより一貫したものになることがわかると思います。

ただし、この方法で onclick イベントを追加することは必ずしも良い設計ではありません。属性タグ自体ではなく JavaScript でハンドラーを追加するのが最善ですが、少なくとも試してみる価値はあります。

<a href="javascript:oWin('/html/de/4664286/printregistrationcontent.html?12-security question&#61;Wie hei&#223;t Ihr Lieblingsrestaurant','PRINT',800,600);" 
  class="print"
  onclick="oWin('/html/de/4664286/printregistrationcontent.html?12-security question&#61;Wie hei&#223;t Ihr Lieblingsrestaurant','PRINT',800,600); return false;"
>
  Seite drucken
</a>

... onclick ハンドラーで false を返して、href リンクがたどられないようにしてください。

于 2010-03-19T14:30:56.600 に答える