5

我们使用的是 .NET 版本的 New Relic。看起来好像在输出时,New Relic 会解析输出以查看它是否包含任何</head>元素并将其<script type="text/javascript">var NREUMQ=...脚本插入到它之前。

我的问题是,在特定的封闭源代码页面上有一行 js 读取...

document.write("<html><head></head><body></body></html>");

...New Relic 然后将其变成...

document.write("<html><head><script type="text/javascript">var NREUMQ=NREUMQ||[];NREUMQ.push(["mark","firstbyte",new Date().getTime()]);</script></head><body></body></html>");

...这会导致严重的头痛,因为 New Relic 代码没有被转义。

我想做的是以某种方式告诉 New Relic 不要在此特定页面上注入代码,因为我无法编辑该页面。

干杯!

这是格式漂亮的修改后的代码-为了您的观看乐趣(不是响应中的实际内容)....

document.write("<html><head><script type="text/javascript">
                var NREUMQ=NREUMQ||[];
                NREUMQ.push(["mark","firstbyte",new Date().getTime()]);
                </script></head><body></body></html>");
4

4 回答 4

3

编辑 2017-01-25
(新网址)


原始帖子
我收到了来自 New Relic 支持的答复。这里是...

你好迈克尔,

这是一个奇妙的问题!有一种非常直接的方法可以完成您想做的事情。

.Net 代理将 javascript 片段注入到发送到用户浏览器的页面的页眉和页脚中,以测量用户端的页面加载时间。我们将此功能简称为真实用户监控或 RUM。更多信息在这里: https ://newrelic.com/docs/features/how-does-real-user-monitoring-work

如果您希望在所有页面上完全禁用 RUM,您可以编辑 newrelic.config和更改此行:

<browserMonitoring autoInstrument="true"/>

对此:

<browserMonitoring autoInstrument="false"/>

您可以在单个页面上禁用 RUM 和/或使用 .Net 代理 API 调用手动指定将 RUM 页眉/页脚片段注入页面的位置。要使用此库,请将对 NewRelic.Api.Agent.dll 的引用添加到您的项目中。DLL 应在此文件夹中找到:"%ProgramFiles%\New Relic\.NET Agent"

然后,您可以使用此 API 调用在特定页面上禁用 RUM:

或者您可以手动将页眉和脚注注入您希望它们使用这些 API 调用的位置:

于 2013-09-20T00:39:01.977 回答
1

我今天遇到了同样的问题。我可以通过让 Javascript 在客户端上结合“他”和“广告”来修复它。这可以防止 New Relic RUM 看到 HEAD 标签。

document.write("<html><he" + "ad></he" + "ad><body></body></html>");

于 2013-12-23T22:50:01.737 回答
0

我只是想添加到杰拉德的答案.. 他的解决方案对我有用,但我也不得不分解 BODY 标签.. New Relic 足够周到,在它无法检测到我的原始标签之后在我的 BODY 标签之前添加它自己的 HEAD 标签头标签。

作为旁注 - 这种自动仪器在多个项目中给我带来了很多痛苦。

于 2014-01-27T10:05:24.763 回答
0

这个问题实际上有一个更简单的解决方案,将一行代码添加到您的 cshtml 或 aspx 文件中:

NewRelic.Api.Agent.NewRelic.DisableBrowserMonitoring();
于 2016-02-10T15:09:35.250 回答