2016-05-20 4 views
0

У меня есть часть приложения на странице на сайте публикации. В этом приложении вызовы JSOM работают хорошо, когда пользователь аутентифицирован. В анонимном режиме он будет работать только после перезагрузки страницы, содержащей часть приложения. Во время первой загрузки, я получаю эту ошибку:JSOM запрещает приложения в анонимном режиме при первой загрузке страницы (перезагрузка разрешает ее)

Не удалось загрузить ресурс: сервер ответил со статусом 403 (Forbidden) http://app-4e3210d8daa297.abc.com/MyList/_vti_bin/client.svc/ProcessQuery

обработчики ошибок для JSOM вызовов возвращает «неопределенный» ошибка сообщение.

Но если я перезагружаю страницу или сама часть приложения (с кодом javascript), то она работает.

Почему звонки JSOM запрещены только для первой загрузки страницы? Как я могу это решить?

+0

Вы пытались подождать со сценарием или попробовать его несколько раз? Когда начинается ваш скрипт? – Nils

+0

Скрипт ждет некоторых файлов javascript sharepoint и dom для загрузки. Чтобы решить эту проблему, я поймаю ошибку в обработчике ошибок jsom-вызовов, а затем перезагрузите приложение, изменив URL-адрес iframe, содержащего его (я добавляю & reload = true, чтобы избежать цикла). Это похоже на быстрое и грязное исправление. – Cyril

+0

Помните, что при использовании console.log в вашем коде это работает только в IE, когда консоль разработчика открыта, в противном случае она отменяет код. – Nils

ответ

0

Это быстрое решение, чтобы временно решить эту проблему, но я уверен, что есть лучший способ.

//error handler of the jsom call that fails 
    function onErrorLoadList(data, error, errorMessage) { 
     console.log("Could not complete cross-domain call: " + errorMessage); 
     // in anonymous mode, for the first load of the app 
     // the JSOM calls fail and errorMessage is undefined 
     if (typeof errorMessage == 'undefined') { 
      // we will reload the app by adding reload=true in the url 
      // if it fails again, we won't do it to avoid a loop 
      if (!location.href.match(/reload=true/)) { 
       console.log("The app reloads."); 
       location.href = location.href + "&reload=true"; 
      } 
     } 
    } 

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

  • Нет связанных вопросов^_^