2017-07-10 5 views
1

私は、SharePoint 2010のドキュメントライブラリを持っていると、ライブラリは、ファイルの種類を保持する:のWordやExcel、PDF、HTML ...ページ上のリンクをループにJavaScriptを使用して設定された目標属性

はほとんどアプリケーションで開いているファイルタイプ。 .htmニュースレターのようなものは、同じウィンドウで開きます。 Sharepointドキュメントライブラリはファイルにリンクしますが、ターゲットプロパティの設定はできません。

これをプログラムでオンロードする必要があります。

私はコードを書くで刺しを撮影した:

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 & onfocus = ""?

+0

次のことを試してみてください。https://stackoverflow.com/questions/103402/how-can-you-have-sharepoint-link-lists-default-to-opening-in-a-new-window –

答えて

0

SharePointが現在のウィンドウで開く理由は、<a>要素にアタッチされたOnClickイベントリスナーと関係があります。それが呼び出すDispEx()関数は、ユーザーがファイルを開くアプリケーションを持っているかどうかを検出し、可能であれば正しいOfficeアプリケーションでOfficeファイルを開くようにします(ファイルをダウンロードし、開いた)。

便利なことに、OnClickイベントはHTMLのonclick属性を使用してインラインでアタッチされるため、その属性の値を壊すことでこの動作を回避できます。

var links = document.querySelectorAll("a"); 
for(var i = 0, len = links.length; i < len; i++){ 
     links[i].target = "_blank"; 
     links[i].onclick = "return false"; 
} 

欠点は、正しいアプリケーションでファイルを開こうとすると、SharePointがそのフットワークを実行しないことです。

新しいウィンドウで開くファイルの種類がわかっている場合は、targetonclickの属性を使用して、別のチェックを実行することができます。

たとえば、すべての.htm、.pdf、および.txtファイルを新しいウィンドウで開きたいが、他のファイルタイプの動作を変更しない場合は、次のようにします。

次のコードは、クリックの動作を変更する前に、ファイル名に指定されたファイルの種類が含まれているかどうかを確認します。

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

コード

は、ファイル名が指定されたファイルの拡張子で終わることを確認する代わりに、そのURL内のどこにでもそれらを含有することにより改善することができます。

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

私は新しいウィンドウで.htmと.htmlリンクをロードするように変更した最後のテキストブロックにいくつかの警告コマンドを追加しました。アラートコマンドは決して実行されず、リンクは新しいウィンドウではなくメインウィンドウに読み込まれます。 おそらく、ページの読み込みが完了した後にコードを実行するために必要な特別なことがありますか? – RCDAWebmaster

+0

はい。 [Field = 'LinkFilename']を最初の行から削除すると、期待どおりに起動します。私は答えとしてマークすることができるようにあなたの答えを編集したいことがあります。 – RCDAWebmaster

+0

混乱して申し訳ありません!これは、ページ上のすべてのリンクを取得するのではなく、リストビューのWebパーツのNameフィールド(フィールドが公開されていることを前提とする)からリンクを取得するCSSセレクタの一例ですが、削除することができます好き。 – Thriggle

関連する問題