2024年9月23日星期一 上午9:07:04
通过 SPFx 中的自定义弹出链接增强用户体验
在现代 SharePoint 开发中,使用 PnP 现代搜索 WebPart (SPFx) 提供可配置的搜索结果可以显着改善用户体验。控制链接的打开方式是开发人员中的一项流行功能,尤其是“详细列表”布局。通常,链接会在新选项卡中打开,但如果我们想在弹出窗口中打开它们怎么办?
在这篇文章中,我们将了解如何通过更改 PnP 现代搜索 Web 部件的链接行为来实现此功能。我们将展示如何强制链接在自定义弹出窗口中打开,而不是在新选项卡中打开搜索结果,从而获得更加集成的用户体验。
当您使用像“`这样的公式(默认为新选项卡)时,就会出现挑战。但是,通过使用 JavaScript,我们可以覆盖此行为并在受控弹出窗口中打开链接。这允许在同一浏览会话中更灵活地显示内容。
我们将引导您完成开发此功能所需的步骤,重点是使用 JavaScript 和 SPFx 来改进详细列表布局。请继续关注我们逐步介绍该解决方案,以确保您的 SharePoint 网站无缝且用户友好。
命令 | 使用示例 |
---|---|
window.open() | 此命令将打开一个新的浏览器窗口或选项卡。此方法打开一个具有特定尺寸和属性(例如宽度、高度和滚动条)的弹出窗口。 |
event.preventDefault() | 防止单击链接的默认行为,即在同一选项卡或新选项卡中打开 URL。这允许我们自定义链接的行为方式,例如打开弹出窗口。 |
querySelectorAll() | data-popup 属性选择所有锚元素()。该方法返回一个 NodeList,它允许我们同时将事件侦听器应用于多个组件。 |
forEach() | 由 querySelectorAll() 生成的 NodeList 中的每个条目都会接收一个操作(例如,附加一个事件侦听器)。这适用于管理 PnP 现代搜索中的许多动态链接元素。 |
addEventListener() | 此技术向触发 openInPopup() 函数的每个链接添加一个单击事件侦听器。有必要覆盖默认的点击行为。 |
import { override } | 此装饰器是 SharePoint 框架 (SPFx) 的一部分,用于覆盖 SPFx WebParts 的默认行为。它支持特定的自定义,例如注入 JavaScript 以提供弹出功能。 |
@override | 在 SPFx 中,装饰器指示方法或属性覆盖功能。当修改 SharePoint 组件的行为时,这是必要的。 |
spyOn() | 使用 Jasmine 进行单元测试期间监视函数调用。在这种情况下,它与 window.open() 一起使用,以确保在测试期间正确启动弹出窗口。 |
expect() | 该命令用于 Jasmine 中的单元测试。它检查是否使用正确的参数调用了 window.open(),以确保弹出窗口以所需的设置出现。 |
了解 SPFx 中的弹出窗口解决方案
解决方案 1:使用 JavaScript `window.open` 创建弹出窗口
此方法使用 JavaScript 来替换使用弹出窗口在新选项卡中打开链接的默认行为,这非常适合在 SharePoint 上下文中使用 SPFx 构建的动态前端解决方案。
<script>
function openInPopup(url) {
// Define popup window features
const features = 'width=800,height=600,resizable=yes,scrollbars=yes';
// Open URL in popup
window.open(url, '_blank', features);
}
// Override link behavior
document.querySelectorAll('a[data-popup="true"]').forEach(function (link) {
link.addEventListener('click', function (event) {
event.preventDefault(); // Prevent default link behavior
openInPopup(this.href); // Open in popup
});
});
</script>
// HTML for the link:
<a href="{{slot item @root.slots.PreviewUrl}}" data-popup="true" style="color: {{@root.theme.semanticColors.link}}">
{{slot item @root.slots.Destination}}
</a>
解决方案 2:将内联 JavaScript 直接添加到链接标记中
此方法将 JavaScript 内联嵌入 HTML 链接标记中,使其成为外部依赖很少的轻量级动态前端系统的理想选择。
<a href="{{slot item @root.slots.PreviewUrl}}"
onclick="event.preventDefault(); window.open(this.href, '_blank', 'width=800,height=600');"
style="color: {{@root.theme.semanticColors.link}}">
{{slot item @root.slots.Destination}}
</a>
// The window.open parameters define the size and behavior of the popup.
解决方案 3:使用 SPFx 和 JavaScript 注入的后端方法
此方法使用 SharePoint 框架 (SPFx) 将 JavaScript 注入自定义 WebPart,从而允许使用 JavaScript 方法在弹出窗口中打开链接。
import { override } from '@microsoft/decorators';
import { BaseClientSideWebPart } from '@microsoft/sp-webpart-base';
export default class PopupWebPart extends BaseClientSideWebPart {
@override
public render(): void {
this.domElement.innerHTML = `
<a href="{{slot item @root.slots.PreviewUrl}}" onclick="openPopup(this.href)">
{{slot item @root.slots.Destination}}
</a>
`;
}
}
function openPopup(url: string): void {
window.open(url, '_blank', 'width=800,height=600,resizable=yes');
}
JavaScript 弹出行为的单元测试
单元测试可以保证弹出功能在浏览器和环境中保持一致。这是前端验证的基本 Jasmine 测试。
describe('Popup Functionality', function() {
it('should open the link in a popup window', function() {
spyOn(window, 'open');
const testUrl = 'http://example.com';
openInPopup(testUrl);
expect(window.open).toHaveBeenCalledWith(testUrl, '_blank', jasmine.any(String));
});
});
探索 SPFx 中的事件处理和动态 JavaScript 注入
在 SPFx 中实现弹出窗口的关键要点
参考资料和资源
- 有关 PnP 现代搜索 Web 部件 (SPFx) 和自定义链接行为的信息源自官方文档。欲了解更多详情,请访问 PnP 现代搜索 GitHub 存储库 。
- 使用 JavaScript 方法的指南,例如 窗口.open() 事件监听器是从 MDN 网络文档 对于 JavaScript。
- 有关 SharePoint 框架 (SPFx) 自定义的详细信息,包括 JavaScript 注入和 @覆盖,可以在 SharePoint 框架概述 。