SharePoint 2010:创建模态对话框时出现JavaScript错误?

时间:2011-06-07 23:32:55

标签: sharepoint sharepoint-2010 sharepoint-clientobject

由于某种原因,我的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时,我没有看到所有的方法和属性。

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

4 个答案:

答案 0 :(得分:16)

问题是尚未加载所需的SharePoint JavaScript“库”。(SharePoint 2010 JS是一个混乱,命名空间/等等来自各地 - 新的“按需”装载更加复杂。

需要加载以使用SP2010模态对话框界面(包括$create_DialogOptionsshowModalDialog)的库是“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

快乐的编码。

答案 1 :(得分:2)

对我而言,它的工作原理如下: ExecuteOrDelayUntilScriptLoaded(function () {}, "sp.js")

和:

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

答案 2 :(得分: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 javascripts。

该方法见于MSDN forums

答案 3 :(得分: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 并看到例子。