最近在搞鼓web office apps的时候发现,在新建文档的时候,
IE浏览器会默认检测本机是否安装了office系列,安装了的话会尝试用客户端office打开模板文档新建。
下图是客户端安装了office 2007 sp2版本的情况(测试了三个版本的office,office 2003、office 2007、office 2007 sp2,发现office 2007 sp2在新建过程中最趋稳定,并且能够识别form认证的站点文档)
调用客户端的代码实际是跟下面三个ActiveX有关
ActiveXObject("SharePoint.OpenDocuments.1");
ActiveXObject("SharePoint.OpenDocuments.2");
ActiveXObject("SharePoint.OpenDocuments.3");
有兴趣的话可以运行下面的代码测试一下
<script type="text/javascript">
openDocObj = new ActiveXObject("SharePoint.OpenDocuments.2");
openDocObj.CreateNewDocument("http://www.abc.com/documents/sampleTemplate.dot", "http://www.abc.com/documents/");
</script>
因为我们无法控制客户端是否安装了哪个版本的office,以及不同版本的office带来的问题,所以统一将新建文档的步骤都放在浏览器中进行,如图:
像这种功能微软应该会想到,所以其实我们可以在网站集功能中找到相关的设置:
首先要保证sharepoint网站开启了office web apps
然后把默认情况下,在客户端应用程序中打开文档停用掉。
为了保证成功率,再iisreset一下.
不过我在操作这个地方的时候出现问题了,这些步骤看上去仿佛都很完美,按道理说经过这些步骤后,web office 应该会忽略客户端office的调用,但是事与愿违,“星星还是那个星星,月亮还是那个月亮”,它还是调用客户端的office,汗!(不清楚这个情况到底是个例,还是这个问题是微软的一个bug,将来可能会修复)
既然按正常方式无效,那我们就自己改吧
其实在新建文档的时候,调用了core.js里面的一个函数
function createNewDocumentWithRedirect(e, a, b, f, d, g, c) {
a: ;
if (g)
if (IsClientAppInstalled(b))
createNewInClient(e, a, b, f);
else
createNewInBrowser(d, a, c);
else if (IsClientAppInstalled(b) && c != 1)
createNewInClient(e, a, b, f);
else
createNewInBrowser(d, a, c)
}
行了,我们就手动把函数改一下,只留下
createNewInBrowser(d, a, c)
即可。
iisreset,OK,问题解决。