这个问题已有一年多的历史了,但我遇到了同样的问题,并找到了解决方法。
我面临的具体问题是尝试将 Office 365 SharePoint 共享文档文件夹与我 PC 上安装的 OneDrive 客户端同步。单击在线共享文件夹上的“同步”按钮时,浏览器将尝试打开 OneDrive for Business 客户端。单击“打开 OneDrive for Business”将启动应用程序并开始同步。一两分钟后,客户端将返回“无法再使用此应用程序同步此库。要同步这些文件,请使用最新的 OneDrive 应用程序。”
为解决问题而采取的不成功步骤:
- 卸载较新的 OneDrive 客户端
- 删除 Office 帐户并重新进行身份验证
- 强制 OneDrive.exe(新客户端)打开“同步”链接
- 将 URL 复制到 SharePoint 文件夹,并将其作为库手动添加到 OneDrive for Business 客户端
经过一番研究和调试,微软似乎还没有更新 SharePoint for Office 365 以将更新的协议用于“下一代”OneDrive 客户端。OneDrive for Business,以前称为 Groove,使用 Groove Open 协议 (grvopen://) 与浏览器内容进行交互。新的 OneDrive 客户端使用不同的 OneDrive Open 协议 (odopen://)。
Groove Open 链接看起来像这样(为了便于阅读,在 & 添加了换行符):
grvopen://<url-encoded-path-to-library-here-including-https://>/{<SharePoint-list-id>}/<list-base-type>?OPENLIST&
siteId=<site-id>&
webId=<web-id>&
webTitle=<web-title>&
listId=<list-id-surrounded-by-braces>&
listTitle=<list-title>&
userEmail=<user-email>&
listTemplateTypeId=<list-base-template-id>&
webUrl=<url-encoded-absolute-path-to-folder>&
webLogoUrl=<relative-url-to-logo>&
webTemplate=<web-template>&
isSiteAdmin=<is-site-admin>
一个示例如下所示:
grvopen://https_58_47_47www_46sharepoint_46com_47Documents/_aahl00000000_450000_450000_450000_45000000000000%7D/101?OPENLIST&siteId=00000000-0000-0000-0000-000000000000&webId=00000000-0000-0000-0000-000000000000&webTitle=SharePoint%20Site%20Title&listId={00000000-0000-0000-0000-000000000000}&listTitle=Documents&userEmail=user@domain.com&listTemplateTypeId=101&webUrl=https%3A%2F%2Fwww.sharepoint.com%2FDocuments&webLogoUrl=_layouts%2F15%2Fimages%2Fsiteicon.png&webTemplate=1&isSiteAdmin=0
我不确定哪种编码会导致 URL 出现下划线,但这与解决方案无关。
我能够在 Office 365 中获取我的个人 OneDrive 目录以与我 PC 上正确的 OneDrive 客户端同步,因此我在单击“同步”时使用 Chrome 的开发工具来监控网络流量。流量显示了新 OneDrive 客户端的以下 URL 格式(添加换行符以提高可读性):
odopen://sync?
siteId=<site-id>&
webId=<web-id>&
webTitle=<web-title>&
listId=<list-id-surrounded-by-braces>&
listTitle=<list-title>&
userEmail=<user-email>&
listTemplateTypeId=<list-base-template-id>&
webUrl=<url-encoded-absolute-path-to-folder>&
webLogoUrl=<relative-url-to-logo>&
webTemplate=<web-template>&
isSiteAdmin=<site-admin>&
scope=OPENLIST
和一个示例网址:
odopen://sync?siteId=%7B00000000-0000-0000-0000-000000000000%7D&webId=%7B00000000-0000-0000-0000-000000000000%7D&webTitle=SharePoint%20Site%20Title&listId=%7B00000000-0000-0000-0000-000000000000%7D&listTitle=Documents&userEmail=email%40domain.com&listTemplateTypeId=101&webUrl=https%3A%2F%2Fwww.sharepoint.com%2FDocuments&webLogoUrl=_layouts%2F15%2Fimages%2Fsiteicon.png&webTemplate=1&isSiteAdmin=0&scope=OPENLIST
与 Groove 链接没有太大区别。_spPageContextInfo
为了制作格式正确的 OneDrive URL,我编写了一个 JavaScript 小书签,以从SharePoint 网站的 DOM 中可用的全局 JavaScript 变量中提取必要的参数。
您可能已经注意到,上面包含 Guids 的参数是用花括号括起来的。从中提取的 Guid_spPageContextInfo
已经用花括号包裹起来。
(function() {
var siteId = _spPageContextInfo.siteId
, webId = _spPageContextInfo.webId
, webTitle = _spPageContextInfo.webTitle
, listId = _spPageContextInfo.listId
, listTitle = _spPageContextInfo.listTitle
, userEmail = _spPageContextInfo.userEmail
, listTemplateTypeId = _spPageContextInfo.listBaseTemplate
, webUrl = _spPageContextInfo.webAbsoluteUrl
, webLogoUrl = _spPageContextInfo.webLogoUrl
, webTemplate = _spPageContextInfo.webTemplate
, isSiteAdmin = (_spPageContextInfo.isSiteAdmin ? 1 : 0)
, scope = "OPENLIST";
var oneDriveURL = "odopen://sync?";
oneDriveURL += "siteId="+encodeURIComponent(siteId);
oneDriveURL += "&webId="+encodeURIComponent(webId);
oneDriveURL += "&webTitle="+encodeURIComponent(webTitle);
oneDriveURL += "&listId="+encodeURIComponent(listId);
oneDriveURL += "&listTitle="+encodeURIComponent(listTitle);
oneDriveURL += "&userEmail="+encodeURIComponent(userEmail);
oneDriveURL += "&listTemplateTypeId="+encodeURIComponent(listTemplateTypeId);
oneDriveURL += "&webUrl="+encodeURIComponent(webUrl);
oneDriveURL += "&webLogoUrl="+encodeURIComponent(webLogoUrl);
oneDriveURL += "&webTemplate="+encodeURIComponent(webTemplate);
oneDriveURL += "&isSiteAdmin="+encodeURIComponent(isSiteAdmin);
oneDriveURL += "&scope="+encodeURIComponent(scope);
window.location.href = oneDriveURL;
}());
要使用上述代码,请在您选择的浏览器中创建一个新书签。将以下行复制并粘贴到书签目标中:
javascript: (function() { var siteId = _spPageContextInfo.siteId , webId = _spPageContextInfo.webId , webTitle = _spPageContextInfo.webTitle , listId = _spPageContextInfo.listId , listTitle = _spPageContextInfo.listTitle , userEmail = _spPageContextInfo.userEmail , listTemplateTypeId = _spPageContextInfo.listBaseTemplate , webUrl = _spPageContextInfo.webAbsoluteUrl , webLogoUrl = _spPageContextInfo.webLogoUrl , webTemplate = _spPageContextInfo.webTemplate , isSiteAdmin = (_spPageContextInfo.isSiteAdmin ? 1 : 0) , scope = "OPENLIST"; var oneDriveURL = "odopen://sync?"; oneDriveURL += "siteId="+encodeURIComponent(siteId); oneDriveURL += "&webId="+encodeURIComponent(webId); oneDriveURL += "&webTitle="+encodeURIComponent(webTitle); oneDriveURL += "&listId="+encodeURIComponent(listId); oneDriveURL += "&listTitle="+encodeURIComponent(listTitle); oneDriveURL += "&userEmail="+encodeURIComponent(userEmail); oneDriveURL += "&listTemplateTypeId="+encodeURIComponent(listTemplateTypeId); oneDriveURL += "&webUrl="+encodeURIComponent(webUrl); oneDriveURL += "&webLogoUrl="+encodeURIComponent(webLogoUrl); oneDriveURL += "&webTemplate="+encodeURIComponent(webTemplate); oneDriveURL += "&isSiteAdmin="+encodeURIComponent(isSiteAdmin); oneDriveURL += "&scope="+encodeURIComponent(scope); window.location.href = oneDriveURL; }());
注意:除非您位于“文档”页面或 SharePoint 网站的特定文档文件夹中,否则此小书签不起作用。即使登录页面上显示“共享文档”,它也无法从 SharePoint 网站的根页面运行。