SharePoint 2013使用JavaScript获取当前用户
如何在脚本编辑器web部件中使用JavaScript获取当前用户名?您可以使用SharePoint JSOM获取当前用户的帐户信息。此代码(作为脚本编辑器web部件中的代码段添加时)将在浏览器中弹出用户的显示和帐户名-您需要在SharePoint 2013使用JavaScript获取当前用户,javascript,sharepoint,sharepoint-2013,Javascript,Sharepoint,Sharepoint 2013,如何在脚本编辑器web部件中使用JavaScript获取当前用户名?您可以使用SharePoint JSOM获取当前用户的帐户信息。此代码(作为脚本编辑器web部件中的代码段添加时)将在浏览器中弹出用户的显示和帐户名-您需要在gotAccount中添加任何其他内容,以获得所需格式的名称 <script type="text/javascript" src="/_layouts/15/SP.js"></script> <script type="text/javasc
gotAccount
中添加任何其他内容,以获得所需格式的名称
<script type="text/javascript" src="/_layouts/15/SP.js"></script>
<script type="text/javascript" src="/_layouts/15/SP.UserProfiles.js"></script>
<script type="text/javascript">
var personProperties;
SP.SOD.executeOrDelayUntilScriptLoaded(getCurrentUser, 'SP.UserProfiles.js');
function getCurrentUser() {
var clientContext = new SP.ClientContext.get_current();
personProperties = new SP.UserProfiles.PeopleManager(clientContext).getMyProperties();
clientContext.load(personProperties);
clientContext.executeQueryAsync(gotAccount, requestFailed);
}
function gotAccount(sender, args) {
alert("Display Name: "+ personProperties.get_displayName() +
", Account Name: " + personProperties.get_accountName());
}
function requestFailed(sender, args) {
alert('Cannot get user account information: ' + args.get_message());
}
</script>
var个人属性;
SP.SOD.executeOrderLayintlScript已加载(getCurrentUser,'SP.UserProfiles.js');
函数getCurrentUser(){
var clientContext=new SP.clientContext.get_current();
personProperties=new SP.UserProfiles.PeopleManager(clientContext.getMyProperties();
加载(personProperties);
executeQueryAsync(gotAccount,requestFailed);
}
函数gotAccount(发送方,参数){
警报(“显示名称:”+personProperties.get_displayName()+
,帐户名:“+personProperties.get_accountName());
}
函数requestFailed(发送方,参数){
警报('无法获取用户帐户信息:'+args.get_message());
}
有关更多信息,请参阅MSDN中的文档。以下是适用于我的代码:
<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 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;
alert(loginName);
}
function onError(error) {
alert("error");
}
</script>
var userid=_spPageContextInfo.userid;
var requestUri=\u spPageContextInfo.webAbsoluteUrl+“/\u api/web/getuserbyid(“+userid+”);
var requestHeaders={“accept”:“application/json;odata=verbose”};
$.ajax({
url:requestUri,
contentType:“application/json;odata=verbose”,
headers:requestHeaders,
成功:一旦成功,
错误:onError
});
成功时的功能(数据、请求){
var loginName=数据d.标题;
警报(登录名);
}
函数onError(错误){
警报(“错误”);
}
我找到了一种更简单的方法,它甚至不使用SP.UserProfiles.js。我不知道它是否适用于每个人的具体情况,但绝对值得分享
//assume we have a client context called context.
var web = context.get_web();
var user = web.get_currentUser(); //must load this to access info.
context.load(user);
context.executeQueryAsync(function(){
alert("User is: " + user.get_title()); //there is also id, email, so this is pretty useful.
}, function(){alert(":(");});
不管怎么说,多亏了你的回答,我才稍微融入了UserProfiles,尽管这对我来说并不是必需的。你可以使用javascript实现如下目的:
function loadConstants() {
this.clientContext = new SP.ClientContext.get_current();
this.clientContext = new SP.ClientContext.get_current();
this.oWeb = clientContext.get_web();
currentUser = this.oWeb.get_currentUser();
this.clientContext.load(currentUser);
completefunc:this.clientContext.executeQueryAsync(Function.createDelegate(this,this.onQuerySucceeded), Function.createDelegate(this,this.onQueryFailed));
}
//U must set a timeout to recivie the exactly user u want:
function onQuerySucceeded(sender, args) {
window.setTimeout("ttt();",1000);
}
function onQueryFailed(sender, args) {
console.log(args.get_message());
}
//By using a proper timeout, u can get current user :
function ttt(){
var clientContext = new SP.ClientContext.get_current();
var groupCollection = clientContext.get_web().get_siteGroups();
visitorsGroup = groupCollection.getByName('OLAP Portal Members');
t=this.currentUser .get_loginName().toLowerCase();
console.log ('this.currentUser .get_loginName() : '+ t);
}
这个怎么样:
$.getJSON(_spPageContextInfo.webServerRelativeUrl + "/_api/web/currentuser")
.done(function(data){
console.log(data.Title);
})
.fail(function() { console.log("Failed")});
如果您在SharePoint页面中,只需使用:
_spPageContextInfo.userId;
如果您知道用户的id,可以使用以下功能:
function getUser(id){
var returnValue;
jQuery.ajax({
url: "http://YourSite/_api/Web/GetUserById(" + id + ")",
type: "GET",
headers: { "Accept": "application/json;odata=verbose" },
success: function(data) {
var dataResults = data.d;
alert(dataResults.Title);
}
});
}
或者你可以试试
var listURL = _spPageContextInfo.webAbsoluteUrl + "/_api/web/currentuser";
请尝试此代码
function GetCurrentUsers() {
var context = new SP.ClientContext.get_current();
this.website = context.get_web();
var currentUser = website.get_currentUser();
context.load(currentUser);
context.executeQueryAsync(Function.createDelegate(this, onQuerySucceeded), Function.createDelegate(this, onQueryFailed));
function onQuerySucceeded() {
var currentUsers = currentUser.get_title();
document.getElementById("txtIssued").innerHTML = currentUsers;
}
function onQueryFailed(sender, args) {
alert('request failed ' + args.get_message() + '\n' + args.get_stackTrace());
}
}要获取当前用户信息:
jQuery.ajax({
url: _spPageContextInfo.webServerRelativeUrl + "/_api/web/currentuser",
type: "GET",
headers: { "Accept": "application/json;odata=verbose" }
}).done(function( data ){
console.log( data );
console.log( data.d.Title );
}).fail(function(){
console.log( failed );
});
我必须使用XML,通过添加内容编辑器Web部件将以下内容放入内容编辑器Web部件中,编辑Web部件,然后单击编辑源按钮并粘贴到其中:
<input type="button" onclick="GetUserInfo()" value="Show Domain, Username and Email"/>
<script type="text/javascript">
function GetUserInfo() {
$.ajax({
type: "GET",
url: "https://<ENTER YOUR DOMAIN HERE>/_api/web/currentuser",
dataType: "xml",
error: function (e) {
alert("An error occurred while processing XML file" + e.toString());
console.log("XML reading Failed: ", e);
},
success: function (response) {
var content = $(response).find("content");
var spsEmail = content.find("d\\:Email").text();
var rawLoginName = content.find("d\\:LoginName").text();
var spsDomainUser = rawLoginName.slice(rawLoginName.indexOf('|') + 1);
var indexOfSlash = spsDomainUser.indexOf('\\') + 1;
var spsDomain = spsDomainUser.slice(0, indexOfSlash - 1);
var spsUser = spsDomainUser.slice(indexOfSlash);
alert("Domain: " + spsDomain + " User: " + spsUser + " Email: " + spsEmail);
}
});
}
</script>
您可以使用sp页面上下文信息:
\u spPageContextOnfo.userLoginName
对于获取Web用户信息非常有用。如果您像我一样使用SP2010,它将不适用于您,因为\u spPageContextInfo.webAbsoluteUrl
不适用于SP2010。检查一下这个对我也有用,谢谢!我无法使用ClientContext对象,因为它没有触发任何错误,但是JS进程被阻止创建ClientContext。我收到了这个JS错误。未捕获引用错误:L_Menu_BaseUrl未定义如果您使用的是脚本编辑器Web部件,您可以使用\u spPageContextInfo.userDisplayName
或\u spPageContextInfo.userDisplayName
来获取用户名或电子邮件地址。可能是我自己,但我无法将其用于ClientWebApp。从一张干净的石板开始,并且令人肃然起敬。此设计最适合哪些部署模式?关于自动、SharePoint或提供商托管的web应用程序。此代码是为脚本编辑器web部件编写的--您是否尝试在SharePoint应用程序中实现相同的功能?如果是这样的话,代码可能会有点不同,因为您不会拥有与脚本编辑器web部件相同的上下文。实际上,我能够从web应用程序获取用户,与脚本编辑器一样。上下文应该总是一样的,只是取决于你打开哪扇门才能得到它。像EF上下文框架一样考虑上下文。有其他问题,与WebApp和跨域相关。在解决x域问题之前,我需要一个Web部件来完成我所需要的工作。这是一种正确的方法,可以在以后获得添加到用户配置文件中的自定义属性。使用personProperties.get_userProfileProperties()
获取包含所有属性的完整对象,包括使用getter函数无法获取的自定义属性。请求是获取用户名。这只返回用户id。如果您使用的是脚本编辑器Web部件,您可以使用.SPPAECOTEXTIFO.U.DeSerDePosiNd或OSPPARECONTCONTIFO.USEDISPLAYND来获取用户名或电子邮件地址。一些属性不取决于您的SPS版本:请考虑考虑添加一个小的说明以及代码。如何获取上下文?SP.clitValue.GET-CurrTurn();
var userid= _spPageContextInfo.userId;
var requestUri = _spPageContextInfo.webAbsoluteUrl + "/_api/web/getuserbyid(" + userid + ")