SharePoint列表附件二次上传失败问题求助
这个问题我之前帮不少开发者排查过,核心原因就是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
相关产品推荐
相关产品推荐

