Zwiększanie komfortu użytkownika dzięki niestandardowym linkom wyskakującym w SPFx
W nowoczesnym programowaniu SharePoint użycie modułu PnP Modern Search WebPart (SPFx) w celu zapewnienia konfigurowalnych wyników wyszukiwania może znacząco poprawić komfort użytkownika. Kontrolowanie sposobu otwierania linków jest popularną funkcją wśród programistów, szczególnie w przypadku układu „Lista szczegółowa”. Zwykle linki otwierają się w nowej karcie, ale co, jeśli chcemy je otworzyć w wyskakującym oknie?
W tym poście przyjrzymy się, jak zaimplementować tę funkcjonalność, zmieniając zachowanie łącza w składniku WebPart PnP Modern Search. Zamiast otwierać wyniki wyszukiwania w nowej karcie, pokażemy, jak wymusić otwarcie łącza w dostosowanym oknie wyskakującym, co zapewni bardziej zintegrowane doświadczenie użytkownika.
Wyzwanie pojawia się, gdy używasz formuły takiej jak ``, która domyślnie oznacza nową kartę. Jednak używając JavaScript, możemy obejść to zachowanie i otworzyć link w kontrolowanym wyskakującym oknie. Pozwala to na większą elastyczność w wyświetlaniu treści w ramach tej samej sesji przeglądania.
Rozkaz | Przykład użycia |
---|---|
window.open() | To polecenie otworzy nowe okno lub kartę przeglądarki. Ta metoda otwiera wyskakujące okno z określonymi wymiarami i właściwościami, takimi jak szerokość, wysokość i paski przewijania. |
event.preventDefault() | Zapobiega domyślnemu zachowaniu klikniętego linku, czyli otwarciu adresu URL w tej samej lub nowej karcie. Dzięki temu możemy dostosować sposób działania łącza, na przykład otwierać wyskakujące okienko. |
querySelectorAll() | Atrybut data-popup wybiera wszystkie elementy kotwiczące (). Ta metoda zwraca listę węzłów, która pozwala zastosować detektory zdarzeń do kilku komponentów jednocześnie. |
forEach() | Każdy wpis na liście NodeList utworzony przez querySelectorAll() otrzymuje akcję (na przykład dołączenie detektora zdarzeń). Dotyczy to zarządzania wieloma elementami łączy dynamicznych w PnP Modern Search. |
addEventListener() | Ta technika dodaje detektor zdarzeń kliknięcia do każdego łącza, które wyzwala funkcję openInPopup(). Jest to konieczne do zastąpienia domyślnego zachowania kliknięcia. |
import { override } | Ten dekorator jest częścią SharePoint Framework (SPFx) i służy do zastępowania domyślnego zachowania składników WebPart SPFx. Umożliwia określone dostosowania, takie jak wstrzykiwanie kodu JavaScript w celu zapewnienia funkcjonalności wyskakujących okienek. |
@override | W SPFx dekorator wskazuje, że metoda lub właściwość zastępuje funkcjonalność. Jest to konieczne przy modyfikowaniu zachowania komponentów SharePoint. |
spyOn() | Monitoruje wywołania funkcji podczas testów jednostkowych za pomocą Jasmine. W tym scenariuszu jest ona używana z window.open() w celu zagwarantowania, że wyskakujące okienko zostanie prawidłowo uruchomione podczas testowania. |
expect() | To polecenie służy do testów jednostkowych w Jasmine. Sprawdza, czy wywołano window.open() z poprawnymi argumentami, gwarantując pojawienie się wyskakującego okienka z żądanymi ustawieniami. |
Zrozumienie rozwiązania okna wyskakującego w SPFx
Rozwiązanie 1: Użycie JavaScript `window.open` do utworzenia wyskakującego okna
<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>
Rozwiązanie 2: Dodanie wbudowanego kodu JavaScript bezpośrednio do tagu łącza
<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.
Rozwiązanie 3: Podejście backendowe wykorzystujące SPFx z wtryskiem 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');
}
Test jednostkowy pod kątem zachowania wyskakujących okienek 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));
});
});
Odkrywanie obsługi zdarzeń i dynamicznego wstrzykiwania JavaScript w SPFx
Kluczowe wnioski dotyczące wdrażania wyskakujących okienek w SPFx
Referencje i zasoby
- Informacje dotyczące modułu PnP Modern Search WebPart (SPFx) i dostosowywania zachowania łączy pochodzą z oficjalnej dokumentacji. Więcej szczegółów znajdziesz na stronie Repozytorium PnP Modern Search na GitHubie .
- Wskazówki dotyczące używania metod JavaScript, takich jak okno.otwórz() i detektorów zdarzeń odniesiono się do Dokumenty internetowe MDN dla JavaScriptu.
- Szczegółowe informacje na temat dostosowań programu SharePoint Framework (SPFx), w tym wstrzykiwania kodu JavaScript i @prześcigać, można znaleźć w Przegląd struktury SharePoint .