Ошибка модального диалогового окна приложения, размещенного на SharePoint, SP2013: не удается прочитать ‘hiddenButtonValueBeforeDialog’

#sharepoint #sharepoint-2013

#sharepoint #sharepoint-2013

Вопрос:

Я просто пытаюсь доказать концепцию отображения модального диалога на странице моего приложения, размещенного на SharePoint. Я полагаю, что включил необходимые библиотеки js, и я даю ему более чем достаточно времени для загрузки библиотек перед выполнением моей функции. Ошибка, которую я получаю,:

Не удается прочитать свойство ‘hiddenButtonValueBeforeDialog’ неопределенного

Я считаю, что у меня есть библиотеки, которые мне нужны::

 <script type="text/javascript" src="/_layouts/15/init.js"></script>
<script type="text/javascript" src="/_layouts/15/sp.runtime.js"></script>
<script type="text/javascript" src="/_layouts/15/sp.js"></script>
<script type="text/javascript" src="/_layouts/15/SP.UserProfiles.js"></script>
<script type="text/javascript" src="/_layouts/15/sp.core.js"></script>
<script type="text/javascript" src="/_layouts/15/sp.ui.dialog.js"></script>
 

Javascript:

 function showDialog() {

var optDict = {
    width: 800,
    height: 500,
    url: 'http://www.google.com',
    title: "Upload your file"
};

try {
    SP.UI.ModalDialog.showModalDialog(optDict);
}
catch (err) {
    alert(err.message);
}

    return false;
}
 

Ответ №1:

Ошибка Cannot read property 'hiddenButtonValueBeforeDialog' of undefined возникает, поскольку sp.ui.dialog.js является глобализированной библиотекой JavaScript, и требуемый файл ресурсов SP.Res.resx не был загружен на стороне клиента ( SP.Res.hiddenButtonValueBeforeDialog генерируется из этого файла).

Решение

  1. ScriptResx HTTP-обработчик используется для загрузки содержимого файлов ресурсов на стороне клиента, необходимо добавить следующую строку:
     <script type="text/javascript" src="/_layouts/15/ScriptResx.ashx?name=sp.resamp;culture=en-us"></script>
     
  2. Кроме того, поскольку существует зависимость для SP.UI.UIUtility
    пространство имен в sp.ui.dialog.js sp.init.js
    библиотеке должно ссылаться на библиотеку JavaScript:

     <script type="text/javascript" src="/_layouts/15/sp.init.js"></script>
     

Комментарии:

1. Это было то, что мне было нужно. Таким образом, это ограничение требует большего количества частей / частей для HTML-страницы, которые обычно уже есть для ASPX-страницы.

2. Я сделал это, но получаю сообщение об ошибке ‘Объект не поддерживает свойство или метод «_dlgWndTop».’ … я пропустил еще одну ссылку?

3. Хорошо, мне все еще не хватало некоторых ссылок… теперь я не получаю никаких ошибок… но диалоговое окно по-прежнему не отображается … 😉

4. Вместо доступа к ScriptResx.ashx я ссылался SP.Res.js напрямую <тип сценария=»текст /javascript» src=»/_layouts/15/SP.Res.js «></script> который сработал для меня. Я не уверен, есть ли какие-либо плюсы и минусы в том, чтобы делать это таким образом.

Ответ №2:

Я добавил все эти ссылки в PlaceHolderMain

 <script src="/_layouts/15/1033/init.js" type="text/javascript"></script>
<script src="/_layouts/15/MicrosoftAjax.js" type="text/javascript"></script>
<script src="/_layouts/15/ie55up.js" type="text/javascript"></script>    
<script src="/_layouts/15/sp.core.js" type="text/javascript"></script>
<script type="text/javascript" src="/_layouts/15/ScriptResx.ashx?name=sp.resamp;culture=en-us"></script>
<script type="text/javascript" src="/_layouts/15/sp.init.js"></script>
<script src="/_layouts/15/sp.ui.dialog.js" type="text/javascript"></script>
<script src="/_layouts/15/core.js" type="text/javascript"></script>
<script src="/_layouts/15/sp.runtime.js" type="text/javascript"></script>
<script src="/_layouts/15/sp.js" type="text/javascript"></script>
<script src="/_layouts/15/inplview.js" type="text/javascript"></script>
<script src="/_layouts/15/cui.js" type="text/javascript"></script>
<script src="/_layouts/15/sp.ribbon.js" type="text/javascript"></script>
<script src="/_layouts/15/mdn.js" type="text/javascript"></script>
<script src="/_layouts/15/sp.ui.pub.ribbon.js" type="text/javascript"></script>
<script src="/_layouts/15/msstring.js" type="text/javascript"></script>
<script src="/_layouts/15/socialdata.js" type="text/javascript"></script>
<script src="/_layouts/15/sp.ui.socialribbon.js" type="text/javascript"></script>
<script src="/_layouts/15/cui.js" type="text/javascript"></script>
<script src="/_layouts/15/wpadder.js" type="text/javascript"></script>
<script src="/_layouts/15/search.js" type="text/javascript"></script>
 

Теперь все ошибки javascript исчезли