Улучшение пользовательского опыта с помощью пользовательских всплывающих ссылок в SPFx
В современной разработке SharePoint использование веб-части современного поиска PnP (SPFx) для предоставления настраиваемых результатов поиска может значительно улучшить взаимодействие с пользователем. Контроль открытия ссылок — популярная функция среди разработчиков, особенно в макете «Подробный список». Обычно ссылки открываются в новой вкладке, но что, если мы хотим открыть их во всплывающем окне?
В этом посте мы рассмотрим, как реализовать эту функцию, изменив поведение ссылок веб-части современного поиска PnP. Вместо того, чтобы открывать результаты поиска на новой вкладке, мы покажем, как заставить ссылку открываться в настраиваемом всплывающем окне, что приведет к более интегрированному пользовательскому интерфейсу.
Проблема возникает, когда вы используете такую формулу, как ``, которая по умолчанию соответствует новой вкладке. Однако, используя JavaScript, мы можем переопределить это поведение и открыть ссылку в контролируемом всплывающем окне. Это обеспечивает большую гибкость при отображении контента в рамках одного сеанса просмотра.
Команда | Пример использования |
---|---|
window.open() | Эта команда откроет новое окно или вкладку браузера. Этот метод открывает всплывающее окно с определенными размерами и свойствами, такими как ширина, высота и полосы прокрутки. |
event.preventDefault() | Предотвращает поведение по умолчанию для нажатой ссылки, то есть открытие URL-адреса на той же или новой вкладке. Это позволяет нам настроить поведение ссылки, например, вместо этого открывать всплывающее окно. |
querySelectorAll() | Атрибут data-popup выбирает все элементы привязки (). Этот метод возвращает NodeList, который позволяет нам применять прослушиватели событий к нескольким компонентам одновременно. |
forEach() | Каждая запись в NodeList, созданная функцией querySelectorAll(), получает действие (например, подключение прослушивателя событий). Это относится к управлению многими элементами динамических ссылок в современном поиске PnP. |
addEventListener() | Этот метод добавляет прослушиватель событий щелчка к каждой ссылке, которая запускает функцию openInPopup(). Это необходимо для переопределения поведения щелчка по умолчанию. |
import { override } | Этот декоратор является частью SharePoint Framework (SPFx) и используется для переопределения поведения веб-частей SPFx по умолчанию. Он позволяет выполнять определенные настройки, такие как внедрение JavaScript для обеспечения функциональности всплывающих окон. |
@override | В SPFx декоратор указывает, что метод или свойство переопределяет функциональность. Это необходимо при изменении поведения компонентов SharePoint. |
spyOn() | Отслеживает вызовы функций во время модульного тестирования с помощью Jasmine. В этом сценарии он используется с window.open(), чтобы гарантировать правильный запуск всплывающего окна во время тестирования. |
expect() | Эта команда используется для модульного тестирования в Jasmine. Он проверяет, что window.open() был вызван с правильными аргументами, гарантируя, что всплывающее окно появится с нужными настройками. |
Понимание решения всплывающих окон в SPFx
Решение 1. Использование JavaScript window.open для создания всплывающего окна
<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 непосредственно в тег ссылки
<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
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
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));
});
});
Изучение обработки событий и динамического внедрения JavaScript в SPFx
Ключевые выводы по реализации всплывающих окон в SPFx
Ссылки и ресурсы
- Информация о веб-части современного поиска PnP (SPFx) и настройке поведения ссылок была получена из официальной документации. Для получения более подробной информации посетите Репозиторий GitHub современного поиска PnP .
- Руководство по использованию методов JavaScript, таких как окно.открыть() и прослушиватели событий ссылались на Веб-документы MDN для JavaScript.
- Подробные сведения о настройках SharePoint Framework (SPFx), включая внедрение JavaScript и @переопределить, можно найти в Обзор платформы SharePoint .