7

何らかの理由で、SharePoint のモーダル ダイアログが正しく機能しません。私が得るエラーはこれです:

  • Firefox の場合:SP.UI.$create_DialogOptions is not a function
  • IE の場合:Object doesn't support this property or method

これが私のコードです:

var options = SP.UI.$create_DialogOptions();
options.width = 525;
options.height = 300;
options.url = '/_layouts/mywork/richtexteditor.aspx';
options.dialogReturnValueCallback = Function.createDelegate(null, function (result, value)
{
    alert(result + value);
});

SP.UI.ModalDialog.showModalDialog(options);

興味深いことに、Firebug で SP.UI を調べると、すべてのメソッドとプロパティが表示されるわけではありません。

注: アプリケーション ページではなく、標準の Web パーツ (視覚的ではない) を使用しています。

4

4 に答える 4

16

問題は、必要な SharePoint JavaScript "ライブラリ" が読み込まれていないことです。(SharePoint 2010 JS はかなり混乱しており、名前空間などはあちこちから来ています。新しい「オンデマンド」読み込みでは、問題はさらに複雑になります)。

$create_DialogOptionsSP2010 Modal Dialog インターフェイス (およびを含む) を使用するためにロードする必要があるライブラリshowModalDialogは "sp.js" です。

「sp.js」がロードされていることを確認するには:

ExecuteOrDelayUntilScriptLoaded(function () {
  // do modal dialog stuff in here (or in another function called from here, etc.)
}, "sp.js")

コールバック関数は、 "sp.js" (ものを含む) が読み込まれることが保証された後にのみ呼び出されます (読み込みエラーがある場合は呼び出されない可能性があります)。SP.UI.ModalDialog

<ScriptLink>これは、 tosp.jsOnDemand指定して使用することでも解決できる可能性がありますが、保証はできません: (このアプローチには問題があった可能性がありますが、今見たプロジェクトで使用されていない理由を思い出せません.)

<SharePoint:ScriptLink runat="server" Name="sp.js" OnDemand="true" Localizable="false" />

詳細/情報については、SPSODを参照してください。

ハッピーコーディング。

于 2011-06-08T00:03:20.903 に答える
1

Adela のアプローチと user166390 のアプローチの両方が古い IE 7 ~ 8 で失敗することがわかりました。ページが完全に解析されておらず、ダイアログの iframe によって変更されようとしているようです。これは、これらの IE にとって悪いことです。私の場合-アプリケーションページでダイアログを自動ポップアップする必要があります-次で修正しました

<asp:Content ID="PageHead" ContentPlaceHolderID="PlaceHolderAdditionalPageHead" runat="server">
    <SharePoint:SPPageManager ID="SPPageManager1" runat="server" />
    <script type="text/javascript">
        var ShowDialog = function () {
            var options = {
                url: '/_login/default.aspx,
                title: 'Title, Description, and Icon',
                width: 640,
                height: 400,
                dialogReturnValueCallback: function(dialogResult, returnValue) {
                    window.location.replace(returnValue);
                }
            };

            SP.UI.ModalDialog.showModalDialog(options);
        };

        ExecuteOrDelayUntilScriptLoaded(ShowDialog, "sp.ui.dialog.js");
    </script>
</asp:Content>

この小さなこと

<SharePoint:SPPageManager ID="SPPageManager1" runat="server" />

すべての SP JavaScript を登録します。

このアプローチは、MSDN フォーラムで見つかりました。

于 2013-09-09T08:59:35.387 に答える