web-dev-qa-db-ja.com

SharePoint 2013は、ページ全体のロード後にJavaScriptを追加します

免責事項:SharePoint2013の経験はありません。

私には問題があります-ページ全体が読み込まれた後、いくつかのjavascript関数をインクルード/起動する必要があります。 DOMDocumentReadyおよびwindow.loadイベントをリッスンしようとしましたが、sharepointはこれらのイベントの後にページの残りをレンダリングします。

私の質問は、ajaxを含むページ全体がレンダリングされた後にスクリプトを実行できるようにするために何をすべきかです。また、ページナビゲーションはハッシュ(#)部分に基づいていることに気付きました。明らかに、その瞬間も検出しなければなりません。

ドキュメント内のヘルプまたは適切なページへのリンクさえあれば素晴らしいでしょう!

28
Kamil Biela

あなたは正しい、$(document).ready()の後のページで多くのことが起こる。 2013にはいくつかのオプションがあります。

1)オンデマンドスクリプト:(jsファイルを読み込んで、コードを実行します。)

_function stuffThatRequiresSP_JS(){
    //your code
}
_

SP.SOD.executeFunc("sp.js")

2)ロードされるまで遅延する(jsファイルを待ってから実行)

_function stuffToRunAfterSP_JS(){
    //your code
}
ExecuteOrDelayUntilScriptLoaded(stuffToRunAfterSP_JS, "sp.js")
_

3)他のものが終了した後にロードする

_function runAfterEverythingElse(){
    // your code
}
_spBodyOnLoadFunctionNames.Push("runAfterEverythingElse");
_

ソース:

executeFunc: http://msdn.Microsoft.com/en-us/library/ff409592(v = office.14).aspx

ExecuteOrDelayUntilScriptLoaded: http://msdn.Microsoft.com/en-us/library/ff411788(v = office.14).aspx

Cantは_spBodyOnLoadFunctionNamesでソースを見つけますが、いくつかの場所で使用しています。

幸運を。

57
Will Fawcett

_spBodyOnLoadFunctionNamesとほぼ同等の文書化されたイベント登録関数はSP.SOD.executeOrDelayUntilEventNotifiedです。これを呼び出して、「sp.bodyloaded」イベントの通知を受け取ります。

SP.SOD.executeOrDelayUntilEventNotified(function () {
    // executed when SP load completes
}, "sp.bodyloaded");

このハンドラは、_spBodyOnLoadFunctionNames関数の少し前に実際に起動します。

この参照はSharePoint 2010向けですが、SODユーティリティはSharePoint 2013にあります: http://msdn.Microsoft.com/en-us/library/office/ff410354(v = office.14).aspx

10
Jack A.

SharePointのOnLoadイベントの前/中/後に読み込まれるカスタムJavaScriptコードを提供するために使用されるさまざまな手法があります。

ExecuteOrDelayUntilBodyLoaded.
Sys.Application.pageLoad.
document.ready Jquery.
_spBodyOnLoadFunctionNames.
_spBodyOnLoadFunction.
ExecuteOrDelayUntilScriptLoaded:sp.core.js.
SP.SOD.executeFunc: sp.js.
Sys.WebForms.PageRequestManager.PageLoaded

– ExecuteOrDelayUntilBodyLoaded関数は常に最初に実行されます(ただし、この段階ではSPメソッド)にアクセスできません。これは、OnLoadプロセスの実際の初期段階でカスタムコードを実行するのに役立ちます。

– 2つのSharePoint onLoad関数_spBodyOnLoadFunctionNamesおよび_spBodyOnLoadFunctionがあります。常に順番に実行されます。したがって、_spBodyOnLoadFunctionNamesに含まれるすべての関数(または他の開発者)の後にコードを実行する場合、最後に実行されるため、この1つの_spBodyOnLoadFunctionを使用すると便利です。

– ExecuteOrDelayUntilScriptLoaded:sp.core.jsおよびSP.SOD.executeFunc:sp.js。ランダムな方法で実行順序を入れ替えています。

–すべての関数(SP、ロード関数の後、Yammerなど)の後にいくつかの関数を実行する場合、この関数を使用してOnLoadイベントをアタッチできます-> Sys.WebForms.PageRequestManager.PageLoaded。

各タイプ、長所と短所を説明する記事全体をここで見ることができます: https://blog.josequinto.com/2015/06/16/custom-javascript-function-loaded-after-the-ui-has -loaded-in-sharepoint-2013 /

よろしく!

8

https://mhusseini.wordpress.com/2012/05/18/handle-clicks-on-calendar-items-in-sharepoint-2010-with-javascript/

上記のリンクは私のために働いた。彼は基本的にExecuteOrDelayUntilScriptLoadedを使用して、SP.UI.ApplicationPages.Calendar.jsのロード後にカレンダーフックコードを起動します。

次に、カレンダーフックで、彼はSP.UI.ApplicationPages.CalendarStateHandler.prototype.onItemsSucceed関数に独自の関数をアタッチします。

 _spBodyOnLoadFunctionNames.Push("LaunchColorCodeCalendarScriptOnReady");


function LaunchColorCodeCalendarScriptOnReady() {


    ExecuteOrDelayUntilScriptLoaded(
        MyCalendarHook,
        "SP.UI.ApplicationPages.Calendar.js");


}

function MyCalendarHook() {
    var _patchCalendar = function () {
        //Do something to the items in the calendar here
        //ColorCodeCalendar();
    };

    var _onItemsSucceed = SP.UI.ApplicationPages.CalendarStateHandler.prototype.onItemsSucceed;
    SP.UI.ApplicationPages.CalendarStateHandler.prototype.onItemsSucceed = function ($p0, $p1) {
        _onItemsSucceed.call(this, $p0, $p1);
        _patchCalendar();
    };
}
2
WWC

組み込みのSharePoint SOD(オンデマンドスクリプト)機能の使用方法については、こちらの記事をご覧ください。 http://www.ilovesharepoint.com/search/label/SOD

SP 2010と2013の両方で問題なく動作します。

オンデマンドスクリプトロードのアイデアは本当に理にかなっています。 SharePoint 2010は本当に多くのJavaScriptをロードします-これには時間がかかります!だから、アイデアは次のとおりです。最初にHTMLをロードし、ブラウザーでレンダリングできるようにして、ユーザーが要求された情報をできるだけ速く読み取れるようにします。そして、2番目のステップで動作(JavaScript)をロードします。

0
Ruslan Korkin