Îmbunătățirea experienței utilizatorului cu linkuri pop-up personalizate în SPFx
În dezvoltarea SharePoint modernă, utilizarea PnP Modern Search WebPart (SPFx) pentru a oferi rezultate de căutare configurabile poate îmbunătăți semnificativ experiența utilizatorului. Controlul modului în care se deschid linkurile este o caracteristică populară în rândul dezvoltatorilor, în special cu aspectul „Lista detaliată”. În mod normal, linkurile se deschid într-o filă nouă, dar dacă vrem să le deschidem într-o fereastră pop-up?
În această postare, ne vom uita la modul de implementare a acestei funcționalități prin schimbarea comportamentului link-ului al PnP Modern Search WebPart. În loc să deschidem rezultatele căutării într-o filă nouă, vom arăta cum să forțați deschiderea linkului într-o fereastră pop-up personalizată, rezultând o experiență de utilizator mai integrată.
Provocarea apare atunci când utilizați o formulă precum ``, care este implicit la o filă nouă. Cu toate acestea, folosind JavaScript, putem suprascrie acest comportament și deschide linkul într-o fereastră pop-up controlată. Acest lucru permite mai multă flexibilitate în afișarea conținutului în cadrul aceleiași sesiuni de navigare.
Comanda | Exemplu de utilizare |
---|---|
window.open() | Această comandă va deschide o nouă fereastră sau filă de browser. Această metodă deschide o fereastră pop-up cu anumite dimensiuni și proprietăți, cum ar fi lățimea, înălțimea și barele de defilare. |
event.preventDefault() | Împiedică comportamentul implicit al unui link pe care se face clic, adică deschiderea adresei URL în aceeași filă sau în filă nouă. Acest lucru ne permite să personalizăm modul în care acționează linkul, cum ar fi deschiderea unei ferestre pop-up. |
querySelectorAll() | Atributul data-popup selectează toate elementele ancora (). Această metodă returnează un NodeList, care ne permite să aplicăm ascultători de evenimente la mai multe componente simultan. |
forEach() | Fiecare intrare din NodeList produsă de querySelectorAll() primește o acțiune (de exemplu, atașarea unui ascultător de evenimente). Acest lucru se aplică pentru gestionarea multor elemente de link dinamic în PnP Modern Search. |
addEventListener() | Această tehnică adaugă un ascultător de eveniment de clic la fiecare link care declanșează funcția openInPopup(). Este necesar pentru a suprascrie comportamentul implicit al clicului. |
import { override } | Acest decorator face parte din SharePoint Framework (SPFx) și este utilizat pentru a suprascrie comportamentul implicit al SPFx WebParts. Permite personalizări specifice, cum ar fi injectarea JavaScript pentru a oferi funcționalitate pop-up. |
@override | În SPFx, un decorator indică faptul că o metodă sau o proprietate suprascrie funcționalitatea. Acest lucru este necesar atunci când modificați comportamentul componentelor SharePoint. |
spyOn() | Monitorizează apelurile de funcții în timpul testării unității cu Jasmine. În acest scenariu, este folosit cu window.open() pentru a garanta că pop-up-ul este lansat corespunzător în timpul testării. |
expect() | Această comandă este folosită pentru testarea unitară în Jasmine. Verifică că window.open() a fost apelat cu argumentele corecte, garantând că pop-up-ul apare cu setările dorite. |
Înțelegerea soluției ferestrei pop-up în SPFx
Soluția 1: Folosind JavaScript `window.open` pentru a crea o fereastră pop-up
<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>
Soluția 2: Adăugarea JavaScript inline direct în eticheta de legătură
<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.
Soluția 3: Abordarea backend folosind SPFx cu injecție 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 unitar pentru comportamentul pop-up 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));
});
});
Explorând gestionarea evenimentelor și injecția dinamică JavaScript în SPFx
Recomandări cheie pentru implementarea ferestrelor pop-up în SPFx
Referințe și resurse
- Informațiile referitoare la PnP Modern Search WebPart (SPFx) și personalizarea comportamentului legăturilor au fost obținute din documentația oficială. Pentru mai multe detalii, vizitați PnP Căutare modernă GitHub Repository .
- Îndrumări privind utilizarea metodelor JavaScript, cum ar fi window.open() iar ascultătorii de evenimente au fost referiți din MDN Web Docs pentru JavaScript.
- Detalii despre personalizările SharePoint Framework (SPFx), inclusiv injecția JavaScript și @override, poate fi găsit în Prezentare generală a cadrului SharePoint .