Скрытие стороннего элемента управления от поискового сканера с использованием файла браузера, который не работает должным образом

Я использую в приложении asp.net 3-сторонний веб-элемент управления, который требует некоторых функций браузера (особенно JavaScript).

Элемент управления проверяет, обладает ли браузер необходимыми возможностями, или выдает исключение, если нет.

Это нормально при переходе на страницу, которая использует этот элемент управления, но когда робот индексирует страницу, выдается ошибка (потому что пользовательский агент искателя не предоставляет требуемых возможностей).

Поскольку я не могу контролировать, как / когда создается экземпляр элемента управления, я пытался замкнуть его, чтобы избежать проверки. Чтобы достичь этого, я создал собственный файл браузера, который я поместил в 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>

(Да, это элемент управления sharepoint, но я предполагаю, что он выходит за рамки)

А вот код адаптера:

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() метод не запускает окно отладчика expecter). Присоединение отладчика вручную не лучше.

Как я могу убедиться, что мой файл браузера действительно используется и исправлен?

1 ответ

Решение

Хм... не уверен, что понимаю, но как только я изменил файл "compat.browser" (не мой), он начал работать.

странный

Другие вопросы по тегам