Verbetering van de gebruikerservaring met aangepaste pop-upkoppelingen in SPFx
Bij moderne SharePoint-ontwikkeling kan het gebruik van de PnP Modern Search WebPart (SPFx) om configureerbare zoekresultaten te bieden de gebruikerservaring aanzienlijk verbeteren. Bepalen hoe links openen is een populaire functie onder ontwikkelaars, vooral met de lay-out "Gedetailleerde lijst". Normaal gesproken openen links in een nieuw tabblad, maar wat als we ze in een pop-upvenster willen openen?
In dit bericht zullen we bekijken hoe we deze functionaliteit kunnen implementeren door het linkgedrag van het PnP Modern Search WebPart te wijzigen. In plaats van de zoekresultaten op een nieuw tabblad te openen, laten we zien hoe u de link kunt forceren om te openen in een aangepast pop-upvenster, wat resulteert in een meer geïntegreerde gebruikerservaring.
De uitdaging doet zich voor wanneer u een formule gebruikt zoals ``, die standaard op een nieuw tabblad staat. Door JavaScript te gebruiken, kunnen we dit gedrag echter negeren en de link openen in een gecontroleerd pop-upvenster. Dit zorgt voor meer flexibiliteit bij het weergeven van inhoud binnen dezelfde browsersessie.
Commando | Voorbeeld van gebruik |
---|---|
window.open() | Met deze opdracht wordt een nieuw browservenster of tabblad geopend. Deze methode opent een pop-upvenster met bepaalde afmetingen en eigenschappen, zoals breedte, hoogte en schuifbalken. |
event.preventDefault() | Voorkomt het standaardgedrag van een aangeklikte link, namelijk het openen van de URL op hetzelfde of een nieuw tabblad. Hierdoor kunnen we aanpassen hoe de link werkt, bijvoorbeeld door in plaats daarvan een pop-up te openen. |
querySelectorAll() | Het data-popup attribuut selecteert alle ankerelementen (). Deze methode retourneert een NodeList, waarmee we gebeurtenislisteners tegelijkertijd op verschillende componenten kunnen toepassen. |
forEach() | Elke vermelding in de NodeList die door querySelectorAll() wordt geproduceerd, ontvangt een actie (bijvoorbeeld het koppelen van een gebeurtenislistener). Dit geldt voor het beheer van veel dynamische linkelementen in PnP Modern Search. |
addEventListener() | Deze techniek voegt een klikgebeurtenislistener toe aan elke link die de functie openInPopup() activeert. Dit is nodig om het standaardklikgedrag te overschrijven. |
import { override } | Deze decorateur maakt deel uit van het SharePoint Framework (SPFx) en wordt gebruikt om het standaardgedrag van SPFx WebParts te overschrijven. Het maakt specifieke aanpassingen mogelijk, zoals het injecteren van JavaScript om pop-upfunctionaliteit te bieden. |
@override | In SPFx geeft een decorateur aan dat een methode of eigenschap de functionaliteit overschrijft. Dit is nodig bij het wijzigen van het gedrag van SharePoint-componenten. |
spyOn() | Bewaakt functieaanroepen tijdens het testen van eenheden met Jasmine. In dit scenario wordt het gebruikt met window.open() om te garanderen dat de pop-up tijdens het testen op de juiste manier wordt gestart. |
expect() | Deze opdracht wordt gebruikt voor het testen van eenheden in Jasmine. Het controleert of window.open() met de juiste argumenten is aangeroepen, en garandeert dat de pop-up met de gewenste instellingen verschijnt. |
De pop-upvensteroplossing in SPFx begrijpen
Oplossing 1: JavaScript `window.open` gebruiken om een pop-upvenster te maken
<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>
Oplossing 2: Inline JavaScript rechtstreeks toevoegen aan de linktag
<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.
Oplossing 3: backend-aanpak met SPFx met JavaScript-injectie
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');
}
Eenheidstest voor JavaScript-pop-upgedrag
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));
});
});
Onderzoek naar gebeurtenisafhandeling en dynamische JavaScript-injectie in SPFx
Belangrijkste aandachtspunten voor het implementeren van pop-upvensters in SPFx
Referenties en bronnen
- Informatie over het PnP Modern Search WebPart (SPFx) en het aanpassen van linkgedrag is afkomstig uit officiële documentatie. Voor meer details, bezoek de PnP Modern Search GitHub-repository .
- Richtlijnen voor het gebruik van JavaScript-methoden zoals venster.open() en gebeurtenislisteners werd verwezen vanuit de MDN-webdocumenten voor JavaScript.
- Details over aanpassingen aan SharePoint Framework (SPFx), inclusief JavaScript-injectie en @overschrijven, is te vinden in de SharePoint Framework-overzicht .