免責事項:SharePoint2013の経験はありません。
私には問題があります-ページ全体が読み込まれた後、いくつかのjavascript関数をインクルード/起動する必要があります。 DOMDocumentReadyおよびwindow.loadイベントをリッスンしようとしましたが、sharepointはこれらのイベントの後にページの残りをレンダリングします。
私の質問は、ajaxを含むページ全体がレンダリングされた後にスクリプトを実行できるようにするために何をすべきかです。また、ページナビゲーションはハッシュ(#)部分に基づいていることに気付きました。明らかに、その瞬間も検出しなければなりません。
ドキュメント内のヘルプまたは適切なページへのリンクさえあれば素晴らしいでしょう!
あなたは正しい、$(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でソースを見つけますが、いくつかの場所で使用しています。
幸運を。
_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
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 /
よろしく!
上記のリンクは私のために働いた。彼は基本的に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();
};
}
組み込みのSharePoint SOD(オンデマンドスクリプト)機能の使用方法については、こちらの記事をご覧ください。 http://www.ilovesharepoint.com/search/label/SOD
SP 2010と2013の両方で問題なく動作します。
オンデマンドスクリプトロードのアイデアは本当に理にかなっています。 SharePoint 2010は本当に多くのJavaScriptをロードします-これには時間がかかります!だから、アイデアは次のとおりです。最初にHTMLをロードし、ブラウザーでレンダリングできるようにして、ユーザーが要求された情報をできるだけ速く読み取れるようにします。そして、2番目のステップで動作(JavaScript)をロードします。