2017-07-10 1 views
1

Ich habe eine Dokumentbibliothek in Sharepoint 2010 und die Bibliothek halten verschiedene Arten von Dateien mit Hilfe von JavaScript: Word, Excel, PDF, HTML ...eine Schleife durch Links auf Seite und legen Sie Zielattribut

Die meisten der Dateitypen in einer Anwendung geöffnet. Diejenigen, die nicht, wie .htm Newsletter, öffnen sich im selben Fenster. Die SharePoint-Dokumentbibliothek ist mit den Dateien verknüpft, erlaubt jedoch nicht das Festlegen der Zieleigenschaft.

Ich möchte dies programmgesteuert onload festlegen.

Ich habe einen Stich zu schreiben den Code genommen:

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;'); 
    } 


} 
} 

Dies funktioniert, weil es den Link zu öffnen in einem neuen Fenster verursacht, sondern eröffnet auch im Hauptfenster. Nach weiteren Recherchen fand ich heraus, dass Sharepoint einige verrückte Dinge mit den Links tut:

<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> 

ich glaube, mein Problem mit dem onfocus Attribut gebührt gesetzt ist oder vielleicht der Onclick. Ich bin mir nicht sicher, was passiert. Sollte ich versuchen, onmousedown, onclick & onfocus = ""?

+0

Versuchen Sie Folgendes: https://stackoverflow.com/questions/103402/how-can-you-have-sharepoint-link-lists-default-to-opening-in-a-new-window –

Antwort

0

Der Grund, warum SharePoint es im aktuellen Fenster öffnet, hat mit dem OnClick-Ereignis-Listener zu tun, der an die <a>-Elemente angehängt ist. Die DispEx() Funktion, die es aufruft, wird verwendet, um zu erkennen, ob der Benutzer über eine entsprechende Anwendung verfügt, in der die Datei geöffnet wird, sodass Office-Dateien nach Möglichkeit in der richtigen Office-Anwendung geöffnet werden (anstatt die Datei herunterzuladen und den Benutzer aufzufordern, zu speichern oder öffnen).

Praktischerweise wird das OnClick-Ereignis inline über das onclick-Attribut im HTML-Code angefügt. Sie können dieses Verhalten umgehen, indem Sie den Wert in diesem Attribut übersteuern.

Der Nachteil ist, dass SharePoint nicht seine fancy Fußarbeit ausführen wird, um zu versuchen, die Dateien in den richtigen Anwendungen zu öffnen.

Wenn Sie wissen, welche Arten von Dateien Sie in einem neuen Fenster öffnen möchten, können Sie eine zusätzliche Überprüfung durchführen, bevor Sie mit den Attributen target und onclick umgehen.

Angenommen, Sie möchten alle .htm-, .pdf- und .txt-Dateien in einem neuen Fenster öffnen, aber das Verhalten anderer Dateitypen unverändert lassen.

Der folgende Code überprüft, ob ein Dateiname einen der angegebenen Dateitypen enthält, bevor das Klickverhalten geändert wird.

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"; 
     } 
} 

Der Code könnte durch Überprüfung verbessert werden, dass die Dateinamen mit den Dateierweiterungen angegeben enden, anstatt sie überall zu enthalten, in ihrem URLs.

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

Ich habe einige Alert-Befehle zu Ihrem letzten Textblock hinzugefügt, den ich geändert habe, um .htm & .html-Links in einem neuen Fenster zu laden. Die Warnbefehle werden nie ausgeführt und die Verknüpfungen werden im Hauptfenster nicht neu geladen. Vielleicht gibt es etwas Besonderes, das ich tun muss, um den Code auszuführen, nachdem die Seite geladen wurde? – RCDAWebmaster

+0

Ja. Entfernen Sie [Field = 'LinkFilename'] aus der ersten Zeile und es wird wie erwartet ausgelöst. Vielleicht möchten Sie Ihre Antwort so bearbeiten, dass ich sie als Antwort markieren kann. – RCDAWebmaster

+0

Sorry für die Verwirrung! Das war nur ein Beispiel CSS-Selektor, um die Links aus dem Feld Name eines Listenansichts-Webparts zu entnehmen, anstatt alle Links auf der Seite zu erfassen, aber ich kann es entfernen und generisch machen, wenn Sie mögen. – Thriggle

Verwandte Themen