Millora de l'experiència de l'usuari amb enllaços emergents personalitzats a SPFx
En el desenvolupament modern de SharePoint, l'ús de PnP Modern Search WebPart (SPFx) per proporcionar resultats de cerca configurables pot millorar significativament l'experiència de l'usuari. Controlar com s'obren els enllaços és una característica popular entre els desenvolupadors, especialment amb el disseny "Llista detallada". Normalment, els enllaços s'obren en una pestanya nova, però què passa si els volem obrir en una finestra emergent?
En aquesta publicació, veurem com implementar aquesta funcionalitat canviant el comportament de l'enllaç de la part web de cerca moderna PnP. En lloc d'obrir els resultats de la cerca en una pestanya nova, mostrarem com forçar l'enllaç a obrir-se en una finestra emergent personalitzada, donant lloc a una experiència d'usuari més integrada.
El repte sorgeix quan utilitzeu una fórmula com ``, que per defecte és una pestanya nova. Tanmateix, utilitzant JavaScript, podem anul·lar aquest comportament i obrir l'enllaç en una finestra emergent controlada. Això permet més flexibilitat a l'hora de mostrar contingut dins de la mateixa sessió de navegació.
Comandament | Exemple d'ús |
---|---|
window.open() | Aquesta ordre obrirà una nova finestra o pestanya del navegador. Aquest mètode obre una finestra emergent amb certes dimensions i propietats, com ara l'amplada, l'alçada i les barres de desplaçament. |
event.preventDefault() | Impedeix el comportament predeterminat d'un enllaç clicat, que és obrir l'URL a la mateixa pestanya o a una nova. Això ens permet personalitzar com actua l'enllaç, com ara obrir una finestra emergent. |
querySelectorAll() | L'atribut data-popup selecciona tots els elements d'ancoratge (). Aquest mètode retorna una NodeList, que ens permet aplicar escoltes d'esdeveniments a diversos components simultàniament. |
forEach() | Cada entrada de NodeList produïda per querySelectorAll() rep una acció (per exemple, adjuntar un escolta d'esdeveniments). Això s'aplica a la gestió de molts elements d'enllaç dinàmic a la cerca moderna PnP. |
addEventListener() | Aquesta tècnica afegeix un oient d'esdeveniments de clic a cada enllaç que activa la funció openInPopup(). És necessari per anul·lar el comportament de clic predeterminat. |
import { override } | Aquest decorador forma part del SharePoint Framework (SPFx) i s'utilitza per anul·lar el comportament predeterminat de SPFx WebParts. Permet personalitzacions específiques, com ara la injecció de JavaScript per proporcionar una funcionalitat emergent. |
@override | A SPFx, un decorador indica que un mètode o propietat anul·la la funcionalitat. Això és necessari quan es modifica el comportament dels components del SharePoint. |
spyOn() | Supervisa les trucades de funció durant les proves d'unitat amb Jasmine. En aquest escenari, s'utilitza amb window.open() per garantir que la finestra emergent s'inicia correctament durant la prova. |
expect() | Aquesta ordre s'utilitza per a proves d'unitats a Jasmine. Comprova que window.open() s'ha cridat amb els arguments correctes, garantint que la finestra emergent apareix amb la configuració desitjada. |
Entendre la solució de la finestra emergent a SPFx
Solució 1: utilitzant JavaScript `window.open` per crear una finestra emergent
<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>
Solució 2: afegir JavaScript en línia directament a l'etiqueta d'enllaç
<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.
Solució 3: enfocament de backend utilitzant SPFx amb injecció de 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 unitari per al comportament emergent de 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));
});
});
Explorant la gestió d'esdeveniments i la injecció dinàmica de JavaScript a SPFx
Punts clau per implementar finestres emergents a SPFx
Referències i Recursos
- La informació sobre el PnP Modern Search WebPart (SPFx) i la personalització del comportament dels enllaços es va obtenir de la documentació oficial. Per a més detalls, visiteu el Repositori de GitHub de cerca moderna PnP .
- Orientació sobre l'ús de mètodes JavaScript com ara window.open() i es va fer referència als oients d'esdeveniments des del MDN Web Docs per a JavaScript.
- Detalls sobre les personalitzacions de SharePoint Framework (SPFx), inclosa la injecció de JavaScript i @override, es pot trobar a Visió general de SharePoint Framework .