• 修改Sharepoint 文档库列表点击Excel文件默认跳转到Excel Service服务 xlviewer.aspx页面


    在Sharepoint 文档库中,当点击库中的一个Excel文件时,Sharepoint默认为转跳到Excel Services上,无论是Sharepoint 的是否开启了Excel Service,当没有开启Excel Service功能时,将会提示Excel Service 打开文件失败。出现”很抱歉,完成您的请求出现错误“ 。

    问题现象

    定位原因

    查看测试Excel 的Html元素,可以看到标签上有onclick 和 onmousedown事件。

    1 <a class="ms-listlink ms-draggable" onmousedown="return VerifyHref(this,event,'1','SharePoint.OpenDocuments','1http://pmoweb.ll.com/producet/_layouts/15/xlviewer.aspx?id=/producet/Documents1/%E6%B5%8B%E8%AF%95Excel.xlsx')" onclick="return DispEx(this,event,'TRUE','FALSE','FALSE','SharePoint.OpenDocuments.3','1','SharePoint.OpenDocuments','','1http://pmoweb.ll.com/producet/_layouts/15/xlviewer.aspx?id=/producet/Documents1/%E6%B5%8B%E8%AF%95Excel.xlsx','','19','0','0','0x400001f07fff1bff')" href="/producet/Documents1/测试Excel.xlsx" DragId="3">测试Excel</a>

    可以看到在两个事件中都出现了,/_layouts/15/xlviewer.aspx?id=/producet/Documents1/%E6%B5%8B%E8%AF%95Excel.xlsx   这个路径。这个就是Sharepoint 默认打开Excel Service 功能。

    要解决不让默认Excel Services打开Excel文件,根据其它JS代码,定位到 Core.js或Core.Debug.js文件_VerifyHref方法中。

    解决方案

    在_verfityHref方法中,处理最一个参数,当Url地址包含xlviewer.aspx,将URL设置为空即可

     1 function _VerifyHref(ele, objEvent, iDefaultItemOpen, strProgId, strServerFileRedirect) {
     2     // 处理当转跳地址中出现xlviewer.aspx,将不跳转
     3     if(strServerFileRedirect && strServerFileRedirect.indexOf("xlviewer.aspx") > 0)
     4     {
     5         strServerFileRedirect="";
     6     }
     7     // End 处理
     8     var fGetHrefForLinking = objEvent.button == Sys.UI.MouseButton.rightButton;
     9     var strUrl = GetRedirectedHref(ele.href, iDefaultItemOpen, strProgId, null, strServerFileRedirect, false, fGetHrefForLinking, ele);
    10     var fIsServerFile = strServerFileRedirect != null && strServerFileRedirect.length > 1;
    11     var fIsClientAppInstalled = IsClientAppInstalled(strProgId, null, ele) && HasRights(0x10, 0x0);
    12 
    13     if (fIsServerFile) {
    14         if (iDefaultItemOpen == "1" && !(fIsClientAppInstalled && !IsNullOrUndefined(ele.getAttribute("isEdit"))) || !fIsClientAppInstalled) {
    15             if (Boolean(ele.getAttribute("isEdit")))
    16                 ele.editHref = ele.href;
    17             if (iDefaultItemOpen == "1")
    18                 ele.href = strUrl;
    19             objEvent.cancelBubble = true;
    20             objEvent.returnValue = true;
    21         }
    22         DetachEvent('mousedown', VerifyHref, ele);
    23     }
    24     return false;
    25 }

    粘贴的代码为Core.Debug.js中,Core.js为精简过的,重新压缩一下即可。

  • 相关阅读:
    MS SQL执行大脚本文件时,提示“未能完成操作,存储空间不足,无法处理此命令”的解决办法
    一、Flux 是什么?
    for...in for..of
    循环总结
    javascript中几种this指向问题
    redux
    布局方式
    js获取前几个月的具体日期
    动态引入js文件
    获取页面url信息
  • 原文地址:https://www.cnblogs.com/xakoy/p/3817443.html
Copyright © 2020-2023  润新知