如何在Glimpse注入其脚本的视图中指定位置?

时间:2013-09-03 07:27:00

标签: asp.net-mvc glimpse

默认情况下,Glimpse会在结束</body>标记之前注入其脚本。结果是没有捕获在页面加载上完成的AJAX调用。我正在使用$(document).ready()来调用AJAX。

是否有一个配置选项或占位符字符串放在我的Layout.cshtml中,它会指示Glimpse在我的init脚本之前加载?

编辑 - 当我在Ajax选项卡下打开完整的Glimpse视图时,页面加载上的请求会显示。但它并没有增加小覆盖显示器上的Ajax计数器。在第一个请求的成功处理程序中稍微进一步启动的任何请求都会增加计数器。那么问题可能就在其他地方了?

2 个答案:

答案 0 :(得分:2)

没有选项可以配置以确定Glimpse将呈现其脚本标记的位置,如您所述,脚本标记将在</body>标记之前呈现,这样可以最大限度地减少Glimpse的影响客户端加载页面的其余部分。此注入也可以独立于您使用ASP.NET MVC或ASP.NET WebForms完成。

另一方面,您提到的问题已在Glimpse issue tracker上公布,并且正在进行中,因此请不要犹豫,在那里提供更多反馈。

答案 1 :(得分:1)

接受的答案仍然适用,但由于它略微降低了该工具的可用性,因此我创建了以下解决方法,将所有调用延迟到$(document).ready(),直到加载Glimpse HUD。如果关闭Glimpse,就没有延迟。

// workaround for the problem when Glimpse does not correctly show AJAX requests that happen before the HUD is initialized
(function () {
    var origDocumentReady = $.fn.ready;
    var checkFinished = false;
    $.fn.ready = function (delegate) {
        var timerId = -1;
        var counter = 0;
        var check = function () {
            if (counter++ > 50) //~2.5sec - if still not loaded, give up
                checkFinished = true;

            if (checkFinished || document.getElementById("glimpse-hud-section-input-ajax")) {
                checkFinished = true;
                window.clearInterval(timerId);
                delegate();
            }
        }

        origDocumentReady(function () {
            if (!checkFinished && typeof glimpse === typeof undefined)
                checkFinished = true;

            if (checkFinished)
                delegate();
            else
                timerId = window.setInterval(check, 50);
        });
    }
})();