7

出于某种原因,我的 SharePoint 的模式对话框无法正常工作。我得到的错误是这样的:

  • 在火狐中: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 时,并没有看到所有的方法和属性。

注意:我使用的是标准 Webpart(不是可视的)而不是应用程序页面。

4

4 回答 4

16

问题是尚未加载所需的 SharePoint JavaScript“库”。(SharePoint 2010 JS 有点混乱,命名空间/等等来自各地——新的“按需”加载使事情变得更加复杂)。

$create_DialogOptions使用SP2010模态对话框界面(包括和)需要加载的库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东西)被保证被加载后才会被调用(如果有加载错误,它可能永远不会被调用)。

这也可以通过使用指定的to来解决,<ScriptLink>我不能保证:(我认为这种方法可能存在问题,但我不记得为什么在我刚刚查看的项目中没有使用它.)sp.jsOnDemand

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

有关更多详细信息/信息,请参阅SPSOD

快乐编码。

于 2011-06-08T00:03:20.903 回答
2

对我来说,它是这样工作的: ExecuteOrDelayUntilScriptLoaded(function () {}, "sp.js")

和:

<SharePoint:ScriptLink ID="ScriptLink1" runat="server" Name="sp.js" 
    OnDemand="false" Localizable="false" LoadAfterUI="true"/>
于 2013-04-24T12:45:53.410 回答
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 回答
0

您可以通过对选项使用通用对象而不是 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 并查看示例。

于 2013-11-12T16:19:46.547 回答