会社のプロキシ サーバーの設定にうまく絞り込めたという奇妙な問題があります。しかし、私は何が起こっているのか理解できません。IT チームと会うときにいくつかの提案をしたいと思います。
さまざまな製品の数量を入力するために使用されるテーブルを表示する ASP.NET アプリケーションがあります。多くの行があるため、ユーザーが矢印、タブ、および Excel のようにキーを入力して移動できるようにする jQuery スクリプトがあります。
この問題は、サイトをイントラネット上の Web サーバーに展開するときに発生します。サイトは IE を使用している私の PC でローカルに正常に動作しますが、公開されると完全に動作しなくなります。コンピューターのプロキシ サーバー設定のチェック/チェック解除に問題を絞り込みました。
以下の表は、グリッドで右矢印キーを 20 回押した場合のスクリプトの累積実行時間をミリ秒単位で示しています。ご覧のとおり、この問題は Internet Explorer にのみ影響し、プロキシが有効になっている場合にのみ影響します。この動作は、私が試した他のどのマシンでも再現可能です。このページはプロキシでは機能しないため、時間をリストできません。
IE 9 では、外観に基づいて、プロキシと非プロキシでわずかに異なる CSS ファイルを取得していることに気付きました。コードを比較すると、異なる CSS がブラウザーに送信されていることがわかりました。プロキシが古いバージョンを提供しないようにスクリプト ファイル名を変更しようとしましたが、それは役に立ちませんでした。
プロキシ CSS の例
#entry_grid TD {
BORDER-BOTTOM: #ccc 1px solid; MIN-WIDTH: 75px; TEXT-ALIGN: center; PADDING-BOTTOM: 2px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; MAX-WIDTH: 75px; BORDER-RIGHT: #ccc 1px solid; PADDING-TOP: 2px}
非プロキシ CSS の例
#entry_grid td {
padding: 2px 0px; text-align: center; border-right-color: rgb(204, 204, 204); border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-bottom-width: 1px; border-right-style: solid; border-bottom-style: solid; min-width: 75px; max-width: 75px;}
テキストを大文字にしたり、パディングの短縮形をより詳細なバージョンに変更したりするなど、いくつかの奇妙なこと。これが jQuery ライブラリなどの他のリソースに関連している可能性があるかどうかはわかりません。ただし、スクリプト自体は同じです。興味のある方のために、問題を引き起こしているコードは次のとおりです。
function convertInput(e) {
//Assign the active CSS class to the selected cell
$('.active').removeClass('active');
$(e).addClass('active');
//Ignore any elements which do not have an 'ID' tag since these should not be edited
var attr = $(e).attr('id');
if (typeof attr !== 'undefined' && attr !== false) {
//Get the text value
var text = $(e).text();
$(e).text('');
lastbox = activebox;
//Create an inputbox and place the original value in there
$('<input type="text" />').appendTo($(e)).val(text).select().blur(
function () {
var orig = $(this);
var parent = $(this).parent();
var newText = orig.val();
parent.text(newText);
updateMonthTotal(parent);
parent.find('input').remove();
});
}
else {
//If we land on an non-updateable field, find the only input box on the table
//and grab its value
var elem = $('#allocation_entry_grid tr td:eq(' + lastbox + ') input');
var newText = $(elem).val();
//Assign it to the underlying TD and remove the textbox
$(elem).parent().text(newText)
$(elem).remove();
};
最後に、キッカーは、イントラネット全体が既に除外されているため、プロキシ設定は重要ではないということです! 下のスクリーンショットでは本名を隠していますが、私のサイトを除外するエントリがあります
ここで何が起こっているのですか?なぜ IE だけなのですか? テストするために他にできることはありますか?
編集
これはすでにコメントに入れましたが、Wireshark でトラフィックを検査すると、プロキシ設定に応じて IE でユーザー エージェントが変化します。
Proxy User-Agent を使用: Mozilla/5.0 (互換性あり; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)
Proxy User-Agent なし: Mozilla/4.0 (互換性あり; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E)
どちらの場合も、プロキシ サーバーへのトラフィックはありません。このチェックボックスを切り替えることで、このコンピューターからアクセスしているすべてのサイトでこれが発生することを確認できます。