javascript - SharePoint 2013 日历 getSelector 在 IE 中未定义

标签 javascript internet-explorer calendar sharepoint-2013

我有一个带有日历 Web 部件的 SharePoint 2013 发布网站。我希望日历成为组日历,但 SharePoint 不保留日历的默认用户。所以我一直在使用一种方法在页面加载时填充日历。这里有详细描述:http://blogs.technet.com/b/meamcs/archive/2013/04/10/sharepoint-group-calendar-adding-default-users.aspx 。 这适用于 Chrome、Opera、Safari 和 FireFox,但不适用于 IE(我使用 IE 模拟器测试了 5 到 11)

链接中描述的方法从日历 html 标记获取上下文 ID,并使用 SharePoint 的 JavaScript 库从预定义的 XML 加载额外的用户。 我从服务器上的文件加载了 XML。 Web 部件的 HTML 如下所示:

<div id="ctl00_ctl43_g_cc24db55_d224_4ea9_b770_4c2edd2c083e_ctl01_ctl00_ctl00" class="ms-acal-rootdiv" ctxid="WPQ3">...</div>

ctxid 用于引用日历。然而,在 IE 中,ctxid 属性不存在!因此,我使用前一个元素来获取 ctxid:

<div class="ms-acal-error" id="WPQ3_err" style="display:none"></div>

这是我将用户加载到日历中的代码:

ExecuteOrDelayUntilScriptLoaded(function(){
    var ctxid; 
    if ( $(".ms-acal-rootdiv").attr("ctxid") ){
        ctxid = $(".ms-acal-rootdiv").attr("ctxid");                                    
    }
    else if ( $(".ms-acal-error").attr("id") ){
        ctxid = $(".ms-acal-error").attr("id").replace("_err","");
    }                                                                   
    SP.UI.ApplicationPages.CalendarSelector.instance().getSelector(1,ctxid).selectEntities(xml,true);
 },"sp.ribbon.js");

IE 抛出错误:“无法获取未定义或 null 引用的属性“selectEntities””,并且 IE 确实为 getSelector(1,ctxid) 返回未定义。我还尝试过对 ctxid 的值进行硬编码,但没有成功。

我已经在 Google 上搜索了几个小时,但尚未找到任何解决方案。大多数描述此过程的博客都有其他用户询问此问题的评论,但没有人回答这些问题。

可能是什么问题?

最佳答案

不确定这是否构成“答案”,我不确定这是否对其他人有帮助,但问题似乎已经解决了!

所以在我修复了另一个问题后,问题似乎已经自行解决:IE 也抛出了错误:

Sys.ArgumentException: Value does not fall within the expected range. Parameter name: serverRelativeUrl sp.runtime.js 

页面上的其他所有内容都继续工作,因此我最初继续关注手头的问题。今天,我决定将重点放在 Sys.ArgumentException 错误上:在我的代码中,某些子站点需要来自其父站点中的列表的信息。为了获取网站集 URL,我使用了 SharePoint 的 L_MenuBase_Url 变量。但是,我发现抛出 Sys.ArgumentException 错误是因为 L_MenuBase_Url 变量(由 SharePoint 设置)为空 ("")。

这在某种程度上是由 SharePoint 执行以下代码引起的:

angular.element("#home_content").scope()._init()

在范围完成加载之前(我认为)。当我努力修复上述错误时,我没有看到此错误:

Object doesn't support property or method '_init'

所以我记录了

的输出
angular.element("#home_content").scope()

果然,它返回了未定义的值。这个错误在任何其他浏览器中都没有发生...无论如何,一旦我通过使用计时器并等待scope()未定义来确保定义了scope(),那么在执行_init()之前,一切都正常工作(包括日历)和 L_Menu_BaseUrl 变量。

我可能应该在提出问题之前修复其他两个错误。对于那个很抱歉!

谢谢你的帮助

关于javascript - SharePoint 2013 日历 getSelector 在 IE 中未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27827616/

相关文章:

Javascript 使用计算值、级别转换和新对象创建进行解构

javascript - Laravel + ReactJS 在 Blade View 中松散组件。一个好的做法?

javascript - “JSON”和 'jQuery' 在 Internet Explorer 7 和 8 中仍未定义

javascript - IE11 : indexOf() not working on one page, 但正在处理其他问题

ios - 从 iPad 设备打开日历的示例代码

swift3 - 每周触发通知 Swift 3

android - 如何在android中的CalendarView中仅显示2周?

javascript - HTML 元素内的增量变量

javascript - Chrome 不适用于线性渐变的属性偏移动画

jquery - 为什么 IE 在将 HTML 响应包装在 jQuery 对象中时会泄漏内存?