SharePoint 2010: ошибка JavaScript при создании модального диалога? - PullRequest
7 голосов
/ 08 июня 2011

По некоторым причинам, модальное диалоговое окно моего 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);

Интересно, что когда я проверяю SP.UI в Firebug, я не вижу все методы и свойства.

ПРИМЕЧАНИЕ. Я использую стандартную веб-часть (не визуальную), а не страницу приложения.

Ответы [ 4 ]

16 голосов
/ 08 июня 2011

Проблема в том, что требуемая «библиотека» JavaScript JavaScript SharePoint не была загружена. (JS SharePoint 2010 - большая часть беспорядка, и пространства имен / и т. Д. Происходят из-за дело еще сложнее с новой загрузкой "по требованию").

Библиотека, которую необходимо загрузить для использования интерфейса модального диалога SP2010 (включая $create_DialogOptions и 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> до sp.js с указанным OnDemand, , но я не могу гарантировать это : (Я думаю, что могли быть проблемы с этим подходом , но я не могу вспомнить, почему он не используется в проекте, на который я только что посмотрел.

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

См. SPSOD для получения более подробной информации / информации.

Счастливого кодирования.

2 голосов
/ 24 апреля 2013

Для меня это сработало так: ExecuteOrDelayUntilScriptLoaded(function () {}, "sp.js")

и:

<SharePoint:ScriptLink ID="ScriptLink1" runat="server" Name="sp.js" 
    OnDemand="false" Localizable="false" LoadAfterUI="true"/>
1 голос
/ 09 сентября 2013

Обнаружено, что подходы 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" />

регистрирует все javascripts SP.

Подход был найден на форумах MSDN .

0 голосов
/ 12 ноября 2013

Вы можете решить эту проблему, используя универсальный объект для параметра вместо класса DialogOptions. это означает, что вы должны написать опцию, как это:

//Using a generic object.
var options = {
    title: "My Dialog Title",
    width: 400,
    height: 600,
    url: "/_layouts/DialogPage.aspx" };

для получения дополнительной информации об использовании этого, посетите: http://msdn.microsoft.com/en-us/library/ff410058%28v=office.14%29.aspx и посмотрите пример.

...