1

我有一个奇怪的问题,我已成功将范围缩小到我公司的代理服务器设置。但是,我无法弄清楚发生了什么,并希望在与我们的 IT 团队会面时提出一些建议。

我有一个 ASP.NET 应用程序,它显示一个表格,用于输入不同产品的数量。因为有很多行,所以我有一个 jQuery 脚本,它允许用户使用箭头、制表符和输入键来导航,就像在 Excel 中一样。

将站点部署到 Intranet 上的 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();
};

最后,更重要的是,代理设置甚至都不重要,因为整个 Intranet 已经被排除在外了!我在下面的屏幕截图中隐藏了真实姓名,但它确实有一个条目应该排除我的网站

在此处输入图像描述

这里发生了什么?为什么只使用 IE,我还能做些什么来测试它吗?

编辑

我已经在评论中提到了这一点,但是当使用 Wireshark 检查流量时,IE 中的用户代理会根据代理设置发生变化:

使用代理 用户代理:Mozilla/5.0(兼容;MSIE 9.0;Windows NT 6.1;WOW64;Trident/5.0)

没有代理 用户代理: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;媒体中心PC 6.0;InfoPath.3;.NET4.0C;.NET4.0E)

在这两种情况下,代理服务器的流量均为 0。我可以通过切换此复选框来确认这发生在我从这台计算机访问的任何网站上。

4

1 回答 1

0

2 条建议: 1. 使用 IE Tester 检查这是否仅发生在 IE9 或所有 IE 2. 如果您认为 IE 在代理/非代理之间的行为不同,请尝试将 css 的不同部分从外部 css 文件移动到您的页面。3. 如果移动 css/js 解决了您的问题,那么您可以尝试使用 !important 覆盖 css 部分的问题部分。

让我知道这对你有用。

由于您的工作看起来不像可以发布在 jsfiddle 上,所以我只能拍摄盲人。总之祝你好运。

于 2013-11-13T09:31:07.527 回答