由于某种原因,我的SharePoint模式对话框无法正常工作。我得到的错误是:
SP.UI.$create_DialogOptions is not a function
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(非可视化),而不是应用程序页面。
答案 0 :(得分:16)
问题是尚未加载所需的SharePoint JavaScript“库”。(SharePoint 2010 JS是一个混乱,命名空间/等等来自各地 - 新的“按需”装载更加复杂。
需要加载以使用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。
快乐的编码。
答案 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 并看到例子。