2014-01-13 1 views
2

вот мой код Javascript для извлечения элементов - это список SharePoint 2010 (SP).SharePoint 2010: проверка безопасности для этой страницы недействительна

var clientContextPath = "/path/site1"; 
var clientContext = new SP.ClientContext(clientContextPath); 
var oList = clientContext.get_web().get_lists().getByTitle(list); 
var camlQuery = new SP.CamlQuery(); 
... 

Однако, если я хочу получить с другого сайта, т.е.

var clientContextPath = "/path/site2"; 

то же код генерирует исключение «Проверка безопасности для этой страницы является недопустимым». Это находится в пределах одного домена, поэтому это не связано с XSS.

Интересно, что тот же самый код отлично работает, когда я использую другой сайт

var clientContextPath = "/path/site3"; 

Пожалуйста, помогите. Спасибо.

ответ

1

Убедитесь, что страница, которую вы используете свой JavaScript имеет этот контроль на нем:

<SharePoint:FormDigest runat="server" /> 

FormDigest добавить маркер безопасности внутри вашей страницы на основе пользователя, места и времени. После публикации страницы маркер безопасности проверяется. После того, как маркер безопасности сгенерирован, он действителен для настраиваемого времени.

http://ranaictiu-technicalblog.blogspot.com.au/2010/02/sharepoint-2010-client-object-model-for.html

UPDATE: если выше не работает, попробуйте это как раз перед тем, как выполнить запрос:

function CustomUpdateFormDigest() 
{ 
    if(window._spPageContextInfo != null) 
    { 
     var $v_2 = window._spPageContextInfo; 
     var $v_3 = $v_2.webServerRelativeUrl; 
     var $v_4 = window._spFormDigestRefreshInterval; 
     UpdateFormDigest($v_3, $v_4); 
    } 
} 
CustomUpdateFormDigest(); 

Это работало для меня, когда мои единственные варианты в том, чтобы отключить проверку страницы ,

UPDATE 2:

Похоже, вы, вероятно, ударил Sharepoint ошибка. Возможно, попробуйте пройти кумулятивные обновления или, в крайнем случае, отключите проверку страницы, просто убедитесь, что вы понимаете последствия этой опции для безопасности.

+0

Я пробовал решение выше, но не работал. Я по-прежнему проверяю безопасность - это недопустимое исключение. Кроме того, это не объясняет, почему код работает отлично для других сайтов, а не для этого конкретного. – Rohit

+0

Проверьте мое обновление, о некоторых рабочих, а некоторые нет. это происходит довольно часто с sharepoint. – Luis

+0

благодарит Луиса, к сожалению, ваше другое решение не работает и для меня. – Rohit

1

Я только что попробовал это решение, и я был уверен, что это не будет работать, но ... это было! В основном это запрос Ajax для сбора нового токена из SharePoint.

$.ajax({ 
     url: projecturl + "/_api/contextinfo", 
     method: "POST", 
     headers: { "Accept": "application/json; odata=verbose"}, 
     success: function (data) { 
      $('#__REQUESTDIGEST').val(data.d.GetContextWebInformation.FormDigestValue); 

      EnsureScriptFunc('sharing.js', 'DisplaySharingDialog', function() { DisplaySharingDialog(projecturl) }); 

     }, 
     error: function (data, errorCode, errorMessage) { 
      alert(errorMessage) 
     } 
    }); 
+0

Куда идет этот код? Тот же Js-файл, который выполняет запрос? – HiTech

Смежные вопросы