为什么 Sharepoint 的 get_current() 方法不一致可用?

Why is Sharepoint's get_current() method inconsistently available?

有了这个Javascript:

function upsertPostTravelListItemTravelerInfo1() {
        var clientContext = SP.ClientContext.get_current();
        . . .

...我 有时 得到这个错误(并非总是如此,如该方法插入列表的数据所示几次(但其他时间不是) );浏览器控制台(Chrome 开发工具)中显示的错误消息是:

Uncaught TypeError: Cannot read property 'get_current' of undefined

基于 this,我在我的 *.ascx 文件中 Javascript 的顶部尝试了这个:

ExecuteOrDelayUntilScriptLoaded(CustomAction, "sp.js");

...但这引起了一个毛团,上面刻有以下明显偏执的表现:“CustomAction 未定义

搞什么啊,拉姆齐!正如那句老话所说,我不能因输而赢。如何让 get_current() 始终如一地正确执行?

所以,我尝试了这个代码:

function upsertPostTravelListItemTravelerInfo1() {
    var clientContext = new SP.ClientContext(siteUrl);
    . . .

...但收到的是这条错误信息:

Uncaught Sys.ArgumentException: Sys.ArgumentException: Value does not fall within the expected range.
Parameter name: serverRelativeUrl

接下来是一大堆 "gobbledygook"(只有纯 D 极客才会喜欢的转储),包括以下两个看起来可能有某种联系的部分: 如果(!SP.ScriptUtility.isUndefined(window._spPageContextInfo)&&!SP.ScriptUtility.isUndefined(window._spFormDigestRefreshInterval)&&!SP.ScriptUtility.isUndefined(window.UpdateFormDigest)){var c=window._spPageContextInfo,d=c.webServerRelativeUrl,e=window._spFormDigestRefreshInterval;

...和:

if(!a)throw Error.argumentNull("serverRelativeUrl");if(!a.startsWith("/"))throw Error.argument("serverRelativeUrl");

任何人都可以从中得出结论吗?

在这行代码中...

ExecuteOrDelayUntilScriptLoaded(CustomAction, "sp.js");

CustomAction 参数需要是您要在加载 SP 库后执行的 JavaScript 函数的名称(使我们能够访问 SharePoint 客户端对象中所有那些令人愉快的对象模型)。

您也可以放弃将命名函数传递给 ExecuteOrDelayUntilScriptLoaded,而只需将内联函数表达式插入第一个参数,如下所示:

ExecuteOrDelayUntilScriptLoaded(function(){
     // do something amazing with the client object model here
}, "sp.js");

因此您的最终代码可能类似于:

function upsertPostTravelListItemTravelerInfo1() {
    ExecuteOrDelayUntilScriptLoaded(function(){
        var clientContext = SP.ClientContext.get_current();
        . . .

    },"SP.JS");
}