SharePoint 2010:创建模式对话框时出现JavaScript错误?
由于某些原因,我的SharePoint的模式对话框无法正常工作。我得到的错误是:SharePoint 2010:创建模式对话框时出现JavaScript错误?,sharepoint,sharepoint-2010,sharepoint-clientobject,Sharepoint,Sharepoint 2010,Sharepoint Clientobject,由于某些原因,我的SharePoint的模式对话框无法正常工作。我得到的错误是: 在Firefox中:SP.UI.$create\u DialogOptions不是一个函数 在IE中:对象不支持此属性或方法 这是我的密码: var options = SP.UI.$create_DialogOptions(); options.width = 525; options.height = 300; options.url = '/_layouts/mywork/richtexteditor.a
- 在Firefox中:
SP.UI.$create\u DialogOptions不是一个函数
- 在IE中:
对象不支持此属性或方法
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时,我没有看到所有的方法和属性
注意:我使用的是标准Web部件(非可视)而不是应用程序页面。问题在于所需的SharePoint JavaScript“库”尚未加载。(SharePoint 2010 JS有点乱,名称空间/等来自世界各地——新的“按需”加载使问题更加复杂) 使用SP2010模态对话框界面(包括
$create\u 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
stuff)后调用(如果加载错误,可能永远不会调用)
这也可以通过使用
到sp.js
并指定OnDemand
来解决,但我不能保证这一点:(我认为这种方法可能有问题,但我想不起来为什么我刚才看的项目中没有使用它。)
有关更多详细信息,请参阅
快乐编码。对我来说,它是这样工作的:
executeOrderLayintlScriptLoaded(函数(){},“sp.js”)
以及:
发现Adela和user166390的方法在旧IEs 7-8中都失败了。似乎页面并没有被完全解析,并试图被对话框的iframe修改,这对这些IEs来说是不好的。对于我的情况-我需要在应用程序页面中自动弹出对话框-我用next修复了它
<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>
您可以通过使用option的泛型对象而不是DialogOptions类来解决此问题。这意味着您必须这样编写选项:
//Using a generic object.
var options = {
title: "My Dialog Title",
width: 400,
height: 600,
url: "/_layouts/DialogPage.aspx" };
有关使用它的更多信息,请访问:
请参阅示例。未正确加载相应的SP“模块”。这可能与动态JS加载有关(在调用时没有加载)。请参阅了解其要点。我们需要动态加载它的唯一原因是我们需要在网格的单击事件上显示弹出窗口cell@Ruby不,不,我是说提供SP.UI.$create\u DialogOptions
的JavaScript尚未加载。SP2010用这个“动态”JS东西创建了一个新的混乱。确保在任何SP DOM“ready”事件之后创建对话框——在布局中确实有一个“SP.JS”的OnDemand脚本链接,不需要。只需使用:var options={…}
,尽管这只会将错误延迟到showmodiallog
行。我不知道为什么$create\u DialogOptions
会被如此广泛地推荐……当时肯定有问题:(.只要加载了正确的JS库,Web部件就没有问题。@Ruby我看到这个答案被接受了——你最终解决了问题了吗?如果是的话(特别是与上面不同的话),怎么解决?:)我不想讨论浏览器缓存问题,因为这毫无意义。但我还是要说@鲁比,我相信。很高兴它是“固定的”。
<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" />
//Using a generic object.
var options = {
title: "My Dialog Title",
width: 400,
height: 600,
url: "/_layouts/DialogPage.aspx" };