1

我在 asp.net 应用程序中使用需要一些浏览器功能(尤其是 JavaScript)的 3 方 Web 控件。

该控件正在检查浏览器是否具有所需的功能,如果没有则抛出异常。

导航到使用此控件的页面时这是可以的,但是当机器人索引页面时,会引发错误(因为爬虫的用户代理没有提供所需的功能)。

由于我无法控制控件的实例化方式/时间,因此我试图将控件短路以避免检查。为此,我创建了一个自定义浏览器文件,并将其放入APP_Browsers文件夹中:

<?xml version="1.0" encoding="utf-8"?>
<browsers>
    <browser refID="Default">
        <controlAdapters>
            <adapter controlType="Microsoft.SharePoint.WebControls.Gantt, Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"
                     adapterType="myNS.MyAdapter, MyAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=c02e9cbf6dab9cb0" />
        </controlAdapters>
    </browser>
</browsers>

(是的,这是一个共享点控件,但我想它超出了范围)

这是适配器的代码:

namespace myNS
{
    public class MyAdapter: ControlAdapter
    {
        protected override void OnLoad(EventArgs e)
        {
            System.Diagnostics.Debugger.Break();
            var context = HttpContext.Current;
            if (context != null)
            {
                var browser = context.Request.Browser;
                if (!browser.Crawler)
                {
                    base.OnLoad(e); // 
                }
            }
        }

        protected override void Render(System.Web.UI.HtmlTextWriter writer)
        {
            System.Diagnostics.Debugger.Break();
            var context = HttpContext.Current;
            if (context != null)
            {
                var browser = context.Request.Browser;
                if (!browser.Crawler)
                {
                    this.Control.RenderControl(writer);
                }
            }
        }
    }
}

不幸的是,这不起作用。我没有错误消息,但似乎从未调用过代码(该Break()方法未触发期望调试器窗口)。手动附加调试器并不好。

如何确保我的浏览器文件被实际使用并且正确?

4

1 回答 1

0

嗯...不确定是否理解,但是一旦我修改了“compat.browser”文件(不是我的),它就开始工作了。

奇怪的

于 2012-10-30T13:31:14.970 回答