3

jQuery スクリプトを使用するカスタム コントロール (ユーザー コントロールではない) を開発しました。

コントロールのスクリプトを埋め込みリソースとしてアセンブリに埋め込み、次のように OnPreRender イベントでページに登録しました。

protected override void OnPreRender(EventArgs e)
{
   string controlScript = "Namespace.MyScript.js";
   ClientScriptManager csm = this.Page.ClientScript;
   csm.RegisterClientScriptResource(typeof(ResourceFinder), controlScript );
   base.OnPreRender(e);
}

このコントロールは、jQuery ライブラリが既に配置されているプロジェクトにデプロイされた場合に機能しますが、jQuery ライブラリが利用できない場合はどうなりますか。ライブラリが既にプロジェクトに含まれているかどうかを確認するにはどうすればよいですか。そうでない場合は、アセンブリにも埋め込んでそこからプルします。私は次のようなことを考えていました:

protected override void OnPreRender(EventArgs e)
{
    ClientScriptManager csm = this.Page.ClientScript;

    // Here I would need to check if jQuery is already registered
    // but there is no such method like: IsClientScriptResourceRegistered
    if (csm.IsClientScriptResourceRegistered("jQuery"))
    {
        string jQueryLib = "Namespace.jquery-1.7.2.min.js";
        csm.RegisterClientScriptResource(typeof(ResourceFinder), jQueryLib);
    }

    string controlScript = "Namespace.MyScript.js";
    csm.RegisterClientScriptResource(typeof(ResourceFinder), controlScript );
    base.OnPreRender(e);
}

いずれにせよ、jQuery ライブラリをアセンブリに埋め込むことができることはわかっていますが、jQuery が既にプロジェクトに含まれている場合は、次のように、ライブラリへの 2 つの呼び出しを含むページになってしまいます。

<!-- Project's jQuery lib -->
<script type="text/javascript" src="/scripts/jquery-1.7.2.min.js"></script>
<!-- DLL's duplicated jQuery lib:  -->
<script type="text/javascript" src="/WebResource.axd?d=AP7y...r0bHQl"></script>
<!-- DLL Control's MyScript.js -->
<script type="text/javascript" src="/WebResource.axd?d=uTGR...ur15b"></script>

...これは私が避けようとしているものです。

何か案は?

4

1 に答える 1

1

短絡演算子を使用して jQuery オブジェクトをテストするスクリプト タグを挿入します。jQuery が利用できない場合は、利用できるようにします。

<script>window.jQuery || document.write('<script src="js/libs/jquery-1.7.1.min.js"><\/script>')</script>
于 2012-07-27T01:00:52.850 に答える