Как исправить «бесконечный цикл перенаправления» в Sharepoint - PullRequest
0 голосов
/ 01 октября 2019

Я новичок в Javascript и настраиваю мультиязычную Sharepoint. Я хочу, чтобы на каждой странице был код, который проверял бы электронную почту пользователя и язык в URL (португальский или испанский) и перенаправлял (или нет) на правильный языковой URL.

Условия работают, но этонаходится в бесконечном цикле.

Где я делаю неправильно?

<script src="/SiteAssets/jquery.SPServices-2013.02a.js" type="text/javascript"></script>
<script src="/SiteAssets/jquery.js" type="text/javascript"></script>

<script type="text/javascript">
  var sitefrom = window.location.href
  var language = sitefrom.search(/portuguese/i);  /* IF language = -1, then site from = SPANISH, otherwise site from is PORTUGUESE */
  var site_es_pt = sitefrom.replace(/spanish/gi, "portuguese");  
  var site_pt_es = sitefrom.replace(/portuguese/gi, "spanish");
  var userid= _spPageContextInfo.userId;
  var requestUri = _spPageContextInfo.webAbsoluteUrl + "/_api/web/getuserbyid(" + userid + ")";
  var requestHeaders = { "accept" : "application/json;odata=verbose" };
  $.ajax({
    url : requestUri,
    contentType : "application/json;odata=verbose",
    headers : requestHeaders,
    success : onSuccess,
    error : onError
  });

  function onSuccess(data, request){
    var loginName = data.d.Title;

    if(loginName == "*@br.XX.com" && language == -1) {alert(loginName);}

    if (loginName !== "*@br.XX.com" && language !== -1){alert(sitefrom);}

  }

  function onError(error) {
    alert("error");
  }

</script>

Ответы [ 2 ]

0 голосов
/ 03 октября 2019

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

<script type="text/javascript">

ExecuteOrDelayUntilScriptLoaded(init,'sp.js');
var currentUser;
function init(){
this.clientContext = new SP.ClientContext.get_current();
this.oWeb = clientContext.get_web();
currentUser = this.oWeb.get_currentUser();
this.clientContext.load(currentUser);
this.clientContext.executeQueryAsync(Function.createDelegate(this,this.onQuerySucceeded), Function.createDelegate(this,this.onQueryFailed));
}

function onQuerySucceeded() {
var loginName = currentUser.get_email();
var user_country = loginName.search(/br.XX/i);  /* IF country = -1, then user is SPANISH, otherwise user is PORTUGUESE */
var sitefrom = window.location.href
var language = sitefrom.search(/portuguese/i);  /* IF language = -1, then site from = SPANISH, otherwise site from is PORTUGUESE */
var site_es_pt = sitefrom.replace(/spanish/gi, "portuguese");  
var site_pt_es = sitefrom.replace(/portuguese/gi, "spanish");

if(user_country !== -1 && language == -1 && loginName !== "xxxxx@br.XX.com") {window.location = site_es_pt;}
if(user_country == -1 && language !== -1 && loginName !== "xxxxx@br.XX.com") {window.location = site_pt_es;}
}

function onQueryFailed(sender, args) {
alert('Request failed. \nError: ' + args.get_message() + '\nStackTrace: ' +     args.get_stackTrace());
}


</script>
0 голосов
/ 02 октября 2019

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

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

<script type="text/javascript">
        $(function () {
            var sitefrom = window.location.href
            var language = sitefrom.search(/portuguese/i);  /* IF language = -1, then site from = SPANISH, otherwise site from is PORTUGUESE */
            var site_es_pt = sitefrom.replace(/spanish/gi, "portuguese");
            var site_pt_es = sitefrom.replace(/portuguese/gi, "spanish");
            var userid = _spPageContextInfo.userId;
            var requestUri = _spPageContextInfo.webAbsoluteUrl + "/_api/web/getuserbyid(" + userid + ")";
            var requestHeaders = { "accept": "application/json;odata=verbose" };
            $.ajax({
                url: requestUri,
                contentType: "application/json;odata=verbose",
                headers: requestHeaders,
                success: onSuccess,
                error: onError
            });
        })      
        function onSuccess(data, request) {
            var loginName = data.d.Title;

            if (loginName == "*@br.XX.com" && language == -1) { alert(loginName); }

            if (loginName !== "*@br.XX.com" && language !== -1) { alert(sitefrom); }

        }
        function onError(error) {
            alert("error");
        }
    </script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...