如何强制PDF在Acrobat打开而非Edge/Chrome预览,适配SharePoint 2013场景?
原方案依赖的editDocumentWithProgID2是IE专属的ActiveX扩展能力,Chromium内核的Edge、Chrome默认不支持ActiveX控件,因此会失效。以下是两种可直接落地的替代方案:
方案1:使用微软Office URI协议(推荐,无SharePoint版本依赖)
微软官方为Office应用提供了跨浏览器的URI唤起协议,直接构造对应格式的链接即可唤起本地默认Office应用打开文件,无需依赖浏览器插件。
URI格式规范:[协议名]:ofe|u|[文件的完整绝对路径]
常用协议名对应关系:
- Word系列(doc/docx/docm等):
ms-word - Excel系列(xls/xlsx/xlsm等):
ms-excel - PowerPoint系列(ppt/pptx/pptm等):
ms-powerpoint - Visio系列(vsd/vsdx/vstx等):
ms-visio - Project系列(mpt/mpp等):
ms-project - OneNote系列:
onenote - PDF文件(需本地安装Adobe Acrobat):
acrobat
示例代码:
var docUrl = $.getUrlVar('docURL'); var fileExtension = docUrl.substr(docUrl.lastIndexOf('.') + 1).toLowerCase(); var extensionProtocolMap = { "doc": "ms-word", "docm": "ms-word", "docx": "ms-word", "mpt": "ms-project", "xlsx": "ms-excel", "pptx": "ms-powerpoint", "one": "onenote", "vstx": "ms-visio", "pdf": "acrobat" }; if (extensionProtocolMap[fileExtension]) { // 构造唤起URI var openUri = `${extensionProtocolMap[fileExtension]}:ofe|u|${docUrl}`; // 直接跳转唤起应用 window.location.href = openUri; // 也可以构造<a>标签插入页面,供用户点击触发 // var a = document.createElement('a'); // a.href = openUri; // a.textContent = '打开文件'; // document.body.appendChild(a); }
注意:部分浏览器会弹出是否允许打开对应应用的提示,属于浏览器安全策略限制,无法跳过
方案2:使用SharePoint 2013原生的ItemOpen跳转页
SharePoint 2013自带/_layouts/15/ItemOpen.aspx页面,会自动根据文件类型判断最优打开方式,兼容所有现代浏览器,无需自己维护后缀对应关系。
使用方式:将文件地址作为source参数拼接在跳转页URL后即可:
var siteUrl = $.getUrlVar('siteURL'); var docUrl = $.getUrlVar('docURL'); var itemOpenUrl = `${siteUrl}/_layouts/15/ItemOpen.aspx?source=${encodeURIComponent(docUrl)}`; window.location.href = itemOpenUrl;
如果需要强制用本地应用打开,而非Office在线版打开,可以追加DefaultItemOpen=0参数:${siteUrl}/_layouts/15/ItemOpen.aspx?source=${encodeURIComponent(docUrl)}&DefaultItemOpen=0
内容的提问来源于stack exchange,提问作者shanabus
相关产品推荐
相关产品推荐

