使用javascript遍历页面上的链接并设置目标属性

时间:2017-07-10 18:09:22

标签: jquery sharepoint

我在SharePoint 2010中有一个文档库,该库将包含不同类型的文件:Word,Excel,PDF,HTML ......

大多数文件类型在应用程序中打开。那些没有的,像.htm时事通讯,在同一个窗口打开。 Sharepoint文档库链接到文件,但不允许设置目标属性。

我想以编程方式设置onload。

我已经开始编写代码:

for(var i = 0, l=document.links.length; i<l; i++) {
var id = document.links[i].href;
var idl = id.length;

if(idl >=7 ){

    var lastfour = id.substr(id.length - 4); 
    var lastfive = id.substr(id.length - 5); 

    if (lastfour == ".pdf"){
        //alert(document.links[i].href);
        document.links[i].setAttribute('target', '_blank');
        document.links[i].setAttribute('onfocus', 'return flase;');
    }


    if (lastfour == ".htm"){
        //alert(document.links[i].href);
        document.links[i].setAttribute('target', '_blank');
        document.links[i].setAttribute('onfocus', 'return false;');
    } 

    if (lastfive == ".html"){
        //alert(document.links[i].href);
        document.links[i].setAttribute('target', '_blank');
        document.links[i].setAttribute('onfocus', 'return false;');
    }  


}
}

这样可行,因为它会导致链接在新窗口中打开,但也会在主窗口中打开它。经过进一步研究,我发现SharePoint使用链接做了一些古怪的事情:

<a onfocus="OnLink(this)" href="/Diocesan/2017 Diocesan Special Collection Calendar.pdf" onmousedown="return VerifyHref(this,event,'0','PdfFile.OpenDocuments','')" onclick="return DispEx(this,event,'TRUE','FALSE','FALSE','','0','PdfFile.OpenDocuments','','','','1210','0','0','0x400001f07fbf1bff','','')">2017 Diocesan Special Collection Calendar</a>

我认为我的问题是由于设置了onfocus属性或者是onclick。我不确定发生了什么。我应该尝试设置onmousedown,onclick&amp; onfocus =“”?

1 个答案:

答案 0 :(得分:0)

SharePoint在当前窗口中打开它的原因与附加到List<int> X_Positions = _Context.ParkingPlaces.Where(e => e.X_position).All(); 元素的OnClick事件侦听器有关。它调用的<a>函数用于检测用户是否具有打开文件的相应应用程序,如果可能,使其在正确的Office应用程序中打开Office文件(而不是下载文件并提示用户保存或打开)。

方便地,OnClick事件通过HTML中的DispEx()属性以内联方式附加,因此您可以通过破坏该属性中的值来绕过此行为。

onclick

缺点是SharePoint不会执行其花哨的步法来尝试在正确的应用程序中打开文件。

为了解决这个问题,如果您知道要在新窗口中打开哪些类型的文件,则可以在弄乱 var links = document.querySelectorAll("a"); for(var i = 0, len = links.length; i < len; i++){ links[i].target = "_blank"; links[i].onclick = "return false"; } target属性之前执行其他检查。

例如,假设您知道您希望在新窗口中打开所有.htm,.pdf和.txt文件,但您希望保持其他文件类型行为不变。

以下代码在更改点击行为之前检查文件名是否包含指定的文件类型之一。

onclick

可以通过检查文件名是否以指定的文件扩展名结尾而不是在其URL中的任何位置包含它们来改进代码。

 var links = document.querySelectorAll("a");
 for(var i = 0, len = links.length; i < len; i++){
      var link = links[i].href;
      if(link.indexOf(".htm") & link.indexOf(".pdf") & link.indexOf(".txt") >= 0){
          links[i].target = "_blank";
          links[i].onclick = "return false";
      }
 }