1

asp.netアプリケーションで、いくつかのブラウザー機能(特にjavascript)を必要とするサードパーティの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>

(はい、これは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()メソッドは期待されるデバッガウィンドウを起動していません)。デバッガーを手動で接続するのは良くありません。

ブラウザファイルが実際に使用されていることを確認し、修正するにはどうすればよいですか?

4

1 に答える 1

0

うーん...わかりませんが、「compat.browser」ファイル(私のものではありません)を変更するとすぐに機能し始めました。

于 2012-10-30T13:31:14.970 に答える