Förbättra användarupplevelsen med anpassade popup-länkar i SPFx
I modern SharePoint-utveckling kan användningen av PnP Modern Search WebPart (SPFx) för att tillhandahålla konfigurerbara sökresultat förbättra användarupplevelsen avsevärt. Att kontrollera hur länkar öppnas är en populär funktion bland utvecklare, särskilt med layouten "Detaljerad lista". Normalt öppnas länkar i en ny flik, men vad händer om vi vill öppna dem i ett popup-fönster?
I det här inlägget kommer vi att titta på hur man implementerar denna funktion genom att ändra länkbeteendet för PnP Modern Search WebPart. I stället för att öppna sökresultaten på en ny flik, visar vi hur du tvingar länken att öppnas i ett anpassat popup-fönster, vilket resulterar i en mer integrerad användarupplevelse.
Utmaningen uppstår när du använder en formel som ``, som har en ny flik som standard. Men genom att använda JavaScript kan vi åsidosätta detta beteende och öppna länken i ett kontrollerat popup-fönster. Detta möjliggör mer flexibilitet vid visning av innehåll inom samma webbläsarsession.
Kommando | Exempel på användning |
---|---|
window.open() | Detta kommando öppnar ett nytt webbläsarfönster eller flik. Den här metoden öppnar ett popup-fönster med vissa dimensioner och egenskaper, såsom bredd, höjd och rullningslister. |
event.preventDefault() | Förhindrar standardbeteendet för en klickad länk, vilket är att öppna webbadressen på samma eller ny flik. Detta gör att vi kan anpassa hur länken fungerar, som att öppna en popup istället. |
querySelectorAll() | Data-popup-attributet väljer alla ankarelement (). Denna metod returnerar en NodeList, som gör att vi kan tillämpa händelseavlyssnare på flera komponenter samtidigt. |
forEach() | Varje post i NodeList som produceras av querySelectorAll() får en åtgärd (till exempel bifoga en händelseavlyssnare). Detta gäller för att hantera många dynamiska länkelement i PnP Modern Search. |
addEventListener() | Den här tekniken lägger till en klickhändelselyssnare till varje länk som utlöser funktionen openInPopup(). Det är nödvändigt för att åsidosätta standardklickbeteendet. |
import { override } | Denna dekorator är en del av SharePoint Framework (SPFx) och används för att åsidosätta SPFx WebParts standardbeteende. Det möjliggör specifika anpassningar, som att injicera JavaScript för att ge popup-funktioner. |
@override | I SPFx indikerar en dekoratör att en metod eller egenskap åsidosätter funktionalitet. Detta är nödvändigt när du ändrar beteendet hos SharePoint-komponenter. |
spyOn() | Övervakar funktionsanrop under enhetstestning med Jasmine. I det här scenariot används det med window.open() för att garantera att popup-fönstret startas på rätt sätt under testning. |
expect() | Detta kommando används för enhetstestning i Jasmine. Den kontrollerar att window.open() anropades med rätt argument, vilket garanterar att popup-fönstret visas med önskade inställningar. |
Förstå popup-fönsterlösningen i SPFx
Lösning 1: Använd JavaScript `window.open` för att skapa ett popup-fönster
<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: Lägg till inline JavaScript direkt i länktaggen
<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-metoden med 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');
}
Enhetstest för JavaScript-popup-beteende
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));
});
});
Utforska händelsehantering och dynamisk JavaScript-injektion i SPFx
Viktiga tips för att implementera popup-fönster i SPFx
Referenser och resurser
- Information om PnP Modern Search WebPart (SPFx) och anpassning av länkbeteende hämtades från officiell dokumentation. För mer information, besök PnP Modern Search GitHub Repository .
- Vägledning om att använda JavaScript-metoder som t.ex window.open() och evenemangslyssnare refererades från MDN Web Docs för JavaScript.
- Detaljer om SharePoint Framework (SPFx)-anpassningar, inklusive JavaScript-injektion och @åsidosätta, finns i SharePoint Framework Översikt .