我目前正在使用WebDAV创建一个项目来制作某种文档管理系统。它是一个托管在IIS中的ASP .NET Web应用程序。 (虽然它没有使用IIS WebDAV,但是对这个项目进行了修改: http://mvc4webdav.codeplex.com/
在过去的几个月里,它运行正常,但几天前,Excel和PowerPoint的行为都是错误的。
我使用FFWinplugin or the Sharepoint ActiveXObject (the OpenDocument Control)取决于浏览器。
当用户点击文档链接时,它将触发此功能:
function editDocument(event, path) {
event.preventDefault();
if (fNewDoc) {
if (!EditDocumentButton.EditDocument(path)) {
alert(L_EditDocumentRuntimeError_Text);
}
} else {
try {
//************************ This part works for word but not excel or power point
//var ffWinPlugin = document.getElementById("winFirefoxPlugin");
//var ov = ffWinPlugin.GetOfficeVersion();
// ffWinPlugin.EditDocument(path, ov);
//*********************************
window.location.replace('ms-powerpoint:ofe|u|' + path); //But this works for excel and powerpoint
} catch (e) {
alert(L_EditDocumentError_Text);
}
}
}
fNewDoc
是我在页面加载时设置的标志,用于确定是否在IE中初始化了OpenDocument控件。
路径类似于:
http://localhost/appName/EditDocument/cb72e81f-fb9c-40af-962b-aa981b79bb72/Test.pptx
问题在于:
当我尝试通过调用上面的EditDocument
函数打开Excel / PowerPoint文件时,使用FFWinPlugin或OpenDocument,它没有打开进行正确编辑。两者都只打开没有受保护的视图但无法编辑。
我进行了调试以查看所做的WebDAV请求,结果发现他们都只是在第一个OPTIONS之后反复请求PROPFIND。
如果我使用window.location.replace(.....)
,则所有3个应用程序(Word,Excel,PP)都会在受保护的视图中打开文档,并且可以进行编辑。此外,它遵循通常的WebDAV请求周期(OPTIONS-HEAD-OPTIONS-LOCK-GET-PROPFIND-UNLOCK)。如果我启用编辑,它就可以正常工作。
我首先在Office 2013(365)上测试了该应用程序,为了向后兼容,我安装了Office 2010(我在线查看,之后我知道将它们并排放在一起是一个坏主意)。在我不久前卸载2010版本之后,整个问题就出现了。
我在另一台计算机上测试过,问题没有发生。在线WebDAV演示也进行了测试,也没有出现任何问题。因此,问题似乎只发生在Excel / PowerPoint和localhost之间。
我可以使用工作方法来解决这个问题,但它会使它不灵活,因为我必须有很多if-else语句来确定要使用哪个ms office应用程序。如果我使用FFWinPlugin,我不需要照顾它。所以我真的想知道发生了什么,但在网上查了一会儿后我什么都没有。
我该如何解决这个问题?起初我认为卸载2010后Office 2013安装已损坏,但在不使用FFWinplugin时它可以正常工作。所以,现在我不确定出了什么问题。