2012-10-30 3 views
1

asp.net 애플리케이션에서 일부 브라우저 기능 (특히 자바 스크립트)이 필요한 3 자 웹 컨트롤을 사용하고 있습니다.예상대로 작동하지 않는 브라우저 파일을 사용하여 검색 크롤러에서 타사 컨트롤 숨김

컨트롤은 브라우저에 필요한 기능이 있는지 확인하고 그렇지 않은 경우 예외를 throw합니다.

이 컨트롤을 사용하는 페이지로 이동할 때 문제가 없지만 로봇이 페이지를 인덱싱 할 때 크롤러의 사용자 에이전트가 필요한 기능을 제공하지 않으므로 오류가 발생합니다.

컨트롤이 인스턴스화되는 방법 /시기를 제어 할 수 없기 때문에 검사를 방지하기 위해 컨트롤을 단락하려고했습니다. 이에 도달하기 위해, 내가 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() 메서드는 예상 디버거 창을 실행하지 않습니다). 수동으로 디버거를 연결하는 것은 좋지 않습니다.

브라우저 파일이 실제로 사용되고 있는지 확인하려면 어떻게합니까?

답변

0

Hum ... 이해할 수는 없지만 "compat.browser"파일 (광산이 아님)을 수정하자마자 작동하기 시작했습니다.

이상한