2012-07-05 30 views
5

Tôi có một tập lệnh JS tùy chỉnh mà tôi tải vào SharePoint và gặp sự cố để thực hiện phương thức init của tôi sau khi SP hoàn thành với khởi tạo riêng của nó.Thực hiện chức năng JavaScript sau khi SharePoint được khởi tạo

_spBodyOnLoadFunctionNames

Tôi đã thử các cách "chính thức" đầu tiên và thêm tên hàm của tôi vào danh sách các chức năng được thực hiện sau khi tải cơ thể với _spBodyOnLoadFunctionNames.push("myInitMethod"); nhưng điều đó không bắn vào mỗi tải trang, tôi không thể dựa trong vấn đề này.

ExecuteOrDelayUntilScriptLoaded

Sau đó, tôi đã cố gắng để sử dụng chức năng ExecuteOrDelayUntilScriptLoaded(myInitMethod, "sp.js"); nhưng nó không cháy trên mỗi tải trang một trong hai.

Cả hai cách đều hoạt động - nhưng không phải mọi lúc. Tôi giả sử rằng kịch bản của tôi được tải đôi khi trước khi SP được khởi tạo. Điều này xảy ra chủ yếu trên Chrome nhưng trên IE là tốt.

Làm cách nào để đảm bảo rằng tập lệnh của tôi được thực thi khi SP sẵn sàng?


Note: Có một hành vi thú vị khi trang web được tải và đối tượng SP là không hoàn toàn khởi tạo (các chức năng đăng ký tại ExecuteOrDelayUntilScriptLoaded chưa được gọi là): Ngay sau khi tôi bấm vào "Navigate Lên "neo trong trang (nơi bạn có thể thấy tình trạng hỗn loạn của các trang con) các tệp sau được tải và hàm init của tôi (được đăng ký trong ExecuteOrDelayUntilScriptLoaded) được gọi!

  • core.debug.js
  • sp.core.debug.js
  • ScriptResx.ashx
  • sp.ui.dialog.debug.js
  • sp.runtime.debug.js
  • sp.debug.js

Vì vậy, mọi thứ đều ổn sau khi nhấp vào - nhưng tại sao không tải trang như trước?

Trả lời

4

Dường như hành vi này liên quan đến một số vấn đề giữa SP 2010 và Google Chrome - Tôi không có vấn đề này trên các trình duyệt khác.

4

Đây là vấn đề về thời gian mà bằng cách nào đó chỉ xảy ra trên các trình duyệt không phải của IE. Xem http://withinsharepoint.com/archives/256 để được giải thích và sửa chữa rất dễ dàng.

2

Tôi đã xem xét câu hỏi của bạn khi tôi đang tìm cách trì hoãn JavaScript của tôi khi tải cho đến khi sp.js có.

Lý do mã bạn cung cấp hoạt động một số thời gian là do (một số thời gian) SharePoint không khởi tạo tất cả mã của nó. Đây là một vấn đề lớn trong Google Chrome, nhưng cũng có thể xảy ra trong các trình duyệt khác (không phải IE). Để giải quyết vấn đề cụ thể đó, bạn có thể làm điều gì đó như thế này:

if (typeof(_spBodyOnLoadWrapper)!='undefined'){_spBodyOnLoadWrapper();} 

Tôi đặt tôi vào bên trong $ (tài liệu) .ready().

Và cảm ơn bạn đã trả lời câu hỏi của tôi :)

Các vấn đề liên quan