Forbedre brukeropplevelsen med tilpassede popup-lenker i SPFx
I moderne SharePoint-utvikling kan bruk av PnP Modern Search WebPart (SPFx) for å gi konfigurerbare søkeresultater forbedre brukeropplevelsen betydelig. Å kontrollere hvordan koblinger åpnes er en populær funksjon blant utviklere, spesielt med oppsettet "Detaljert liste". Vanligvis åpnes lenker i en ny fane, men hva om vi vil åpne dem i et popup-vindu?
I dette innlegget skal vi se på hvordan du implementerer denne funksjonaliteten ved å endre lenkeoppførselen til PnP Modern Search WebPart. I stedet for å åpne søkeresultatene i en ny fane, viser vi hvordan du tvinger lenken til å åpnes i et tilpasset popup-vindu, noe som resulterer i en mer integrert brukeropplevelse.
Utfordringen oppstår når du bruker en formel som ``, som er standard til en ny fane. Ved å bruke JavaScript kan vi imidlertid overstyre denne virkemåten og åpne koblingen i et kontrollert popup-vindu. Dette gir mer fleksibilitet ved visning av innhold i samme nettleserøkt.
Kommando | Eksempel på bruk |
---|---|
window.open() | Denne kommandoen åpner et nytt nettleservindu eller fane. Denne metoden åpner et popup-vindu med visse dimensjoner og egenskaper, for eksempel bredde, høyde og rullefelt. |
event.preventDefault() | Forhindrer standardoppførselen til en klikket lenke, som er å åpne URL-en i samme eller ny fane. Dette lar oss tilpasse hvordan lenken fungerer, for eksempel å åpne en popup i stedet. |
querySelectorAll() | Data-popup-attributtet velger alle ankerelementer (). Denne metoden returnerer en NodeList, som lar oss bruke hendelseslyttere til flere komponenter samtidig. |
forEach() | Hver oppføring i NodeList produsert av querySelectorAll() mottar en handling (for eksempel ved å legge ved en hendelseslytter). Dette gjelder håndtering av mange dynamiske lenkeelementer i PnP Modern Search. |
addEventListener() | Denne teknikken legger til en klikkhendelseslytter til hver lenke som utløser openInPopup()-funksjonen. Det er nødvendig for å overstyre standard klikkadferd. |
import { override } | Denne dekoratoren er en del av SharePoint Framework (SPFx) og brukes til å overstyre SPFx WebParts sin standardoppførsel. Det muliggjør spesifikke tilpasninger, for eksempel å injisere JavaScript for å gi popup-funksjonalitet. |
@override | I SPFx indikerer en dekoratør at en metode eller egenskap overstyrer funksjonalitet. Dette er nødvendig når du endrer virkemåten til SharePoint-komponenter. |
spyOn() | Overvåker funksjonsanrop under enhetstesting med Jasmine. I dette scenariet brukes den med window.open() for å garantere at popup-vinduet startes på riktig måte under testing. |
expect() | Denne kommandoen brukes til enhetstesting i Jasmine. Den sjekker at window.open() ble kalt med de riktige argumentene, og garanterer at popup-vinduet vises med de ønskede innstillingene. |
Forstå popup-vinduløsningen i SPFx
Løsning 1: Bruk JavaScript `window.open` for å lage et popup-vindu
<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: Legg til inline JavaScript direkte i koblingskoden
<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-tilnærming ved bruk av SPFx med JavaScript-injeksjon
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));
});
});
Utforsker hendelseshåndtering og dynamisk JavaScript-injeksjon i SPFx
Viktige tips for implementering av popup-vinduer i SPFx
Referanser og ressurser
- Informasjon om PnP Modern Search WebPart (SPFx) og tilpasning av lenkeoppførsel ble hentet fra offisiell dokumentasjon. For mer informasjon, besøk PnP Modern Search GitHub Repository .
- Veiledning om bruk av JavaScript-metoder som f.eks window.open() og arrangementslyttere ble referert fra MDN Web Docs for JavaScript.
- Detaljer om SharePoint Framework (SPFx)-tilpasninger, inkludert JavaScript-injeksjon og @overstyre, finnes i SharePoint Framework Oversikt .