You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SharePoint列表附件二次上传失败问题求助

解决IE中SharePoint列表附件上传第二个文件时的SP.PostMessageRequestInfo已注册错误

这个问题我之前帮不少开发者排查过,核心原因就是IE浏览器的脚本加载机制会重复执行SP.RequestExecutor.js中的类型注册代码,而Chrome等现代浏览器会从缓存读取脚本且不会重复注册类型,所以只在IE里触发这个错误——第一次上传时脚本加载并注册了SP.PostMessageRequestInfo类型,第二次上传时再次调用$.getScript加载同一脚本,就会抛出“类型已注册”的异常。

下面给你几个可行的解决方案:

方案1:上传前检查脚本是否已加载,避免重复请求

在调用$.getScript之前,先判断SP.PostMessageRequestInfo类型是否已经存在,只有不存在时才加载脚本:

// 定义你的上传逻辑函数
function uploadAttachment() {
    // 这里写你的SharePoint附件上传代码
    // ...
}

// 处理上传触发逻辑
function handleUpload() {
    // 检查SP命名空间及目标类型是否已存在
    if (typeof SP === 'undefined' || typeof SP.PostMessageRequestInfo === 'undefined') {
        $.getScript(scriptbase + "SP.RequestExecutor.js", function () {
            uploadAttachment();
        });
    } else {
        // 脚本已加载完成,直接执行上传逻辑
        uploadAttachment();
    }
}

方案2:页面初始化时一次性加载脚本,复用已加载的资源

把SP.RequestExecutor.js的加载逻辑移到页面初始化阶段,只加载一次,之后所有上传操作直接复用已加载的脚本:

$(document).ready(function() {
    // 页面加载完成后一次性加载脚本
    $.getScript(scriptbase + "SP.RequestExecutor.js", function () {
        // 脚本加载完成后,绑定上传按钮的事件
        $('#yourUploadButton').click(function() {
            uploadAttachment();
        });
    });
});

// 上传逻辑函数
function uploadAttachment() {
    // 这里直接写上传代码,无需再加载脚本
    // ...
}

额外的IE兼容优化

为了避免IE的旧文档模式引发更多问题,建议在页面头部添加meta标签,强制IE使用最新的文档模式:

<meta http-equiv="X-UA-Compatible" content="IE=edge">

简单总结下:这个问题本质是IE对重复加载脚本的处理方式和现代浏览器不同,只要避免重复加载SP.RequestExecutor.js,就能解决这个类型重复注册的错误。

内容的提问来源于stack exchange,提问作者saumya bhargava

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:30:29