Forbedring af brugeroplevelsen med brugerdefinerede popup-links i SPFx
I moderne SharePoint-udvikling kan brug af PnP Modern Search WebPart (SPFx) til at levere konfigurerbare søgeresultater forbedre brugeroplevelsen markant. At kontrollere, hvordan links åbner, er en populær funktion blandt udviklere, især med layoutet "Detaljeret liste". Normalt åbner links i en ny fane, men hvad nu hvis vi vil åbne dem i et popup-vindue?
I dette indlæg vil vi se på, hvordan man implementerer denne funktionalitet ved at ændre linkadfærden for PnP Modern Search WebPart. I stedet for at åbne søgeresultaterne i en ny fane, viser vi, hvordan man tvinger linket til at åbne i et tilpasset pop op-vindue, hvilket resulterer i en mere integreret brugeroplevelse.
Udfordringen opstår, når du bruger en formel som ``, som som standard har en ny fane. Men ved at bruge JavaScript kan vi tilsidesætte denne adfærd og åbne linket i et kontrolleret popup-vindue. Dette giver mulighed for mere fleksibilitet i visning af indhold inden for den samme browsersession.
Kommando | Eksempel på brug |
---|---|
window.open() | Denne kommando åbner et nyt browservindue eller fane. Denne metode åbner et pop op-vindue med bestemte dimensioner og egenskaber, såsom bredde, højde og rullepaneler. |
event.preventDefault() | Forhindrer standardadfærden for et klikket link, som er at åbne URL'en i samme eller ny fane. Dette giver os mulighed for at tilpasse, hvordan linket fungerer, såsom at åbne en popup i stedet for. |
querySelectorAll() | Data-popup-attributten vælger alle ankerelementer (). Denne metode returnerer en NodeList, som giver os mulighed for at anvende begivenhedslyttere på flere komponenter samtidigt. |
forEach() | Hver post i NodeList produceret af querySelectorAll() modtager en handling (f.eks. vedhæftning af en begivenhedslytter). Dette gælder for håndtering af mange dynamiske linkelementer i PnP Modern Search. |
addEventListener() | Denne teknik tilføjer en klikhændelseslytter til hvert link, der udløser funktionen openInPopup(). Det er nødvendigt for at tilsidesætte standardklikadfærden. |
import { override } | Denne dekorator er en del af SharePoint Framework (SPFx) og bruges til at tilsidesætte SPFx WebParts' standardadfærd. Det muliggør specifikke tilpasninger, såsom indsprøjtning af JavaScript for at give popup-funktionalitet. |
@override | I SPFx angiver en dekoratør, at en metode eller egenskab tilsidesætter funktionalitet. Dette er nødvendigt, når du ændrer adfærden for SharePoint-komponenter. |
spyOn() | Overvåger funktionsopkald under enhedstest med Jasmine. I dette scenarie bruges det sammen med window.open() for at garantere, at popup-vinduet startes korrekt under test. |
expect() | Denne kommando bruges til enhedstest i Jasmine. Den kontrollerer, at window.open() blev kaldt med de korrekte argumenter, hvilket garanterer, at pop op-vinduet vises med de ønskede indstillinger. |
Forstå popup-vindueløsningen i SPFx
Løsning 1: Brug JavaScript `window.open` til at oprette et popup-vindue
<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>
Løsning 2: Tilføjelse af Inline JavaScript direkte i Link Tag
<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.
Løsning 3: Backend-tilgang ved hjælp af SPFx med JavaScript-injektion
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');
}
Unit Test for JavaScript Popup Behavior
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));
});
});
Udforskning af hændelseshåndtering og dynamisk JavaScript-injektion i SPFx
Nøglemuligheder til implementering af popup-vinduer i SPFx
Referencer og ressourcer
- Oplysninger om PnP Modern Search WebPart (SPFx) og tilpasning af linkadfærd blev hentet fra officiel dokumentation. For flere detaljer, besøg PnP Modern Search GitHub Repository .
- Vejledning i brug af JavaScript metoder som f.eks window.open() og begivenhedslyttere blev refereret fra MDN Web Docs til JavaScript.
- Detaljer om SharePoint Framework (SPFx) tilpasninger, inklusive JavaScript-injektion og @override, kan findes i SharePoint Framework Oversigt .