jquery - 类似于 sharepoint 自定义 aspx 页面中的功能
问题描述
我想在 SharePoint 网站上创建的自定义“aspx”页面上启用“喜欢”功能(即)点赞数。下面是我找到的类似功能的 jQuery 代码。
var likepage = {
//Likes the current page.
LikePage: function () {
likepage.getUserLikedPage(function(likedPage, likeCount) {
var aContextObject = new SP.ClientContext();
EnsureScriptFunc('reputation.js', 'Microsoft.Office.Server.ReputationModel.Reputation', function() {
Microsoft.Office.Server.ReputationModel.
Reputation.setLike(aContextObject,
_spPageContextInfo.pageListId.substring(1, 37),
_spPageContextInfo.pageItemId, !likedPage);
aContextObject.executeQueryAsync(
function() {
var elements = document.getElementsByClassName('likecount');
if (likedPage) {
likeCount--;
} else {
likeCount++;
}
for (var i = 0; i < elements.length;i++) {
elements[i].innerHTML = likeCount;
}
}, function(sender, args) {
// Custom error handling if needed
});
});
});
},
// Checks if the user already liked the page, and returns the number of likes.
getUserLikedPage: function (cb) {
var context = new SP.ClientContext(_spPageContextInfo.webServerRelativeUrl);
var list = context.get_web().get_lists().getById(_spPageContextInfo.pageListId);
var item = list.getItemById(_spPageContextInfo.pageItemId);
context.load(item, "LikedBy", "ID", "LikesCount");
context.executeQueryAsync(Function.createDelegate(this, function (success) {
// Check if the user id of the current users is in the collection LikedBy.
var $v_0 = item.get_item('LikedBy');
if (!SP.ScriptHelpers.isNullOrUndefined($v_0)) {
for (var $v_1 = 0, $v_2 = $v_0.length; $v_1 < $v_2; $v_1++) {
var $v_3 = $v_0[$v_1];
if ($v_3.$1E_1 === _spPageContextInfo.userId) {
cb(true, item.get_item('LikesCount'));
}
}
}
cb(false, item.get_item('LikesCount'));
}),
Function.createDelegate(this, function (sender, args) {
//Custom error handling if needed
}));
},
initialize: function () {
var elements = document.getElementsByClassName('likecount');
likepage.getUserLikedPage(function(likedPage, likesCount) {
for (var i = 0; i < elements.length; i++) {
elements[i].innerHTML = likesCount;
}
});
}
};
_spBodyOnLoadFunctionNames.push("likepage.initialize");
这里的问题是我在以下行中收到错误:
var context = new SP.ClientContext(_spPageContextInfo.webServerRelativeUrl);
它给了我以下错误:
_spPageContextInfo 未定义
经过一番搜索,我发现有些库需要导入。所以我导入了以下库。
<SharePoint:ScriptLink Name="MicrosoftAjax.js" runat="server" Defer="False" Localizable="false"/>
<SharePoint:ScriptLink Name="SP.core.js" runat="server" Defer="False" Localizable="false"/>
<SharePoint:ScriptLink Name="SP.js" runat="server" Defer="False" Localizable="false"/>
<SharePoint:ScriptLink Name="SP.runtime.js" runat="server" Defer="False" Localizable="false"/>
<SharePoint:FormDigest ID="FormDigest1" runat="server"></SharePoint:FormDigest>
即使在加载这些之后,我也会遇到上述错误。可能的原因是什么?任何帮助都是不言而喻的。
解决方案
下面的示例代码供您参考:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<%@ Page Language="C#" %>
<%@ Register tagprefix="SharePoint" namespace="Microsoft.SharePoint.WebControls" assembly="Microsoft.SharePoint, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<html dir="ltr" xmlns="http://www.w3.org/1999/xhtml" xmlns:mso="urn:schemas-microsoft-com:office:office" xmlns:msdt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882">
<head runat="server">
<meta name="WebPartPageExpansion" content="full" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Test</title>
<meta http-equiv="X-UA-Compatible" content="IE=10" />
<SharePoint:CssRegistration Name="default" runat="server"/>
<SharePoint:ScriptLink Name="MicrosoftAjax.js" runat="server" Defer="False" Localizable="false"/>
<SharePoint:ScriptLink Name="SP.core.js" runat="server" Defer="False" Localizable="false"/>
<SharePoint:ScriptLink Name="SP.js" runat="server" Defer="False" Localizable="false"/>
<SharePoint:ScriptLink Name="SP.runtime.js" runat="server" Defer="False" Localizable="false"/>
<SharePoint:FormDigest ID="FormDigest1" runat="server"></SharePoint:FormDigest>
<script type="text/javascript" src="//code.jquery.com/jquery-1.12.4.min.js"></script>
<script type="text/javascript">
$(function() {
alert(_spPageContextInfo.webServerRelativeUrl);
});
</script>
</head>
<body>
<form id="form1" runat="server">
</form>
</body>
</html>
推荐阅读
- react-redux - 如何使用布局组件并使用 React Redux 工具包更改带有 ID 的数据
- javascript - 下拉菜单绑定
- react-native - 未定义不是对象(评估“Amazon.trim”)在本机反应中
- c++ - 由函数指针初始化的 std::function 的异常安全
- android-fragments - CameraX 的预览 SurfaceView 与 ViewPager 无法正常工作
- python - 为什么我的 GUI 界面中的按钮不见了?
- nunit - 在 Visual Studio 2019 上运行 Nunit 项目后,我没有看到任何测试运行
- java - 如何在 JButton 上使用 ActionListener 来更改 JPanel 容器内的 JLabel 组件的背景?
- java - GSON StackOverFlow 错误 - 使用带有继承的 Lombok 时的序列化
- php - 在 WooCommerce 中的产品 (Schema.org) 的结构化数据中添加 ean 代码 (gtin)