Miglioramento dell'esperienza utente con collegamenti popup personalizzati in SPFx
Nello sviluppo moderno di SharePoint, l'uso della WebPart di ricerca moderna PnP (SPFx) per fornire risultati di ricerca configurabili può migliorare significativamente l'esperienza dell'utente. Il controllo della modalità di apertura dei collegamenti è una funzionalità popolare tra gli sviluppatori, in particolare con il layout "Elenco dettagliato". Normalmente i collegamenti si aprono in una nuova scheda, ma cosa succede se vogliamo aprirli in una finestra popup?
In questo post esamineremo come implementare questa funzionalità modificando il comportamento del collegamento della webpart Ricerca moderna PnP. Invece di aprire i risultati della ricerca in una nuova scheda, mostreremo come forzare l'apertura del collegamento in una finestra popup personalizzata, ottenendo un'esperienza utente più integrata.
La sfida sorge quando utilizzi una formula come ``, che per impostazione predefinita indica una nuova scheda. Tuttavia, utilizzando JavaScript, possiamo ignorare questo comportamento e aprire il collegamento in una finestra popup controllata. Ciò consente una maggiore flessibilità nella visualizzazione dei contenuti all'interno della stessa sessione di navigazione.
Comando | Esempio di utilizzo |
---|---|
window.open() | Questo comando aprirà una nuova finestra o scheda del browser. Questo metodo apre una finestra popup con determinate dimensioni e proprietà, come larghezza, altezza e barre di scorrimento. |
event.preventDefault() | Impedisce il comportamento predefinito di un collegamento cliccato, ovvero l'apertura dell'URL nella stessa scheda o in una nuova. Questo ci consente di personalizzare il modo in cui agisce il collegamento, ad esempio aprendo invece un popup. |
querySelectorAll() | L'attributo data-popup seleziona tutti gli elementi di ancoraggio (). Questo metodo restituisce una NodeList, che ci consente di applicare ascoltatori di eventi a più componenti contemporaneamente. |
forEach() | Ogni voce nella NodeList prodotta da querySelectorAll() riceve un'azione (ad esempio, allegare un ascoltatore di eventi). Questo vale per la gestione di molti elementi di collegamento dinamico in PnP Modern Search. |
addEventListener() | Questa tecnica aggiunge un ascoltatore di eventi clic a ciascun collegamento che attiva la funzione openInPopup(). È necessario per sovrascrivere il comportamento di clic predefinito. |
import { override } | Questo decoratore fa parte di SharePoint Framework (SPFx) e viene utilizzato per sovrascrivere il comportamento predefinito di SPFx WebParts. Consente personalizzazioni specifiche, come l'inserimento di JavaScript per fornire funzionalità popup. |
@override | In SPFx, un decoratore indica che un metodo o una proprietà sovrascrive la funzionalità. Ciò è necessario quando si modifica il comportamento dei componenti di SharePoint. |
spyOn() | Monitora le chiamate di funzione durante i test unitari con Jasmine. In questo scenario, viene utilizzato con window.open() per garantire che il popup venga avviato in modo appropriato durante il test. |
expect() | Questo comando viene utilizzato per i test unitari in Jasmine. Controlla che window.open() sia stato chiamato con gli argomenti corretti, garantendo che il popup appaia con le impostazioni desiderate. |
Comprendere la soluzione della finestra popup in SPFx
Soluzione 1: utilizzare JavaScript `window.open` per creare una finestra popup
<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>
Soluzione 2: aggiunta di JavaScript in linea direttamente nel tag di collegamento
<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.
Soluzione 3: approccio backend utilizzando SPFx con JavaScript Injection
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 per il comportamento del popup 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));
});
});
Esplorazione della gestione degli eventi e dell'inserimento dinamico di JavaScript in SPFx
Punti chiave per l'implementazione delle finestre popup in SPFx
Riferimenti e risorse
- Le informazioni relative alla WebPart PnP Modern Search (SPFx) e alla personalizzazione del comportamento dei collegamenti provengono dalla documentazione ufficiale. Per maggiori dettagli, visitare il Repository GitHub di ricerca moderna PnP .
- Guida all'utilizzo di metodi JavaScript come finestra.aperta() e si fa riferimento ai listener di eventi da Documenti Web MDN per JavaScript.
- Dettagli sulle personalizzazioni di SharePoint Framework (SPFx), inclusi JavaScript injection e @override, può essere trovato in Panoramica della struttura di SharePoint .