Verbessern der Benutzererfahrung mit benutzerdefinierten Popup-Links in SPFx
In der modernen SharePoint-Entwicklung kann die Verwendung des PnP Modern Search WebPart (SPFx) zur Bereitstellung konfigurierbarer Suchergebnisse die Benutzererfahrung erheblich verbessern. Die Steuerung des Öffnens von Links ist eine beliebte Funktion bei Entwicklern, insbesondere beim Layout „Detaillierte Liste“. Normalerweise werden Links in einem neuen Tab geöffnet, aber was ist, wenn wir sie in einem Popup-Fenster öffnen möchten?
In diesem Beitrag sehen wir uns an, wie Sie diese Funktionalität implementieren, indem Sie das Linkverhalten des PnP Modern Search-WebParts ändern. Anstatt die Suchergebnisse in einem neuen Tab zu öffnen, zeigen wir, wie Sie das Öffnen des Links in einem benutzerdefinierten Popup-Fenster erzwingen, was zu einem integrierteren Benutzererlebnis führt.
Die Herausforderung entsteht, wenn Sie eine Formel wie „` verwenden, die standardmäßig einen neuen Tab verwendet. Mithilfe von JavaScript können wir dieses Verhalten jedoch außer Kraft setzen und den Link in einem kontrollierten Popup-Fenster öffnen. Dies ermöglicht eine größere Flexibilität bei der Anzeige von Inhalten innerhalb derselben Browsersitzung.
Befehl | Anwendungsbeispiel |
---|---|
window.open() | Dieser Befehl öffnet ein neues Browserfenster oder eine neue Registerkarte. Diese Methode öffnet ein Popup-Fenster mit bestimmten Abmessungen und Eigenschaften, z. B. Breite, Höhe und Bildlaufleisten. |
event.preventDefault() | Verhindert das Standardverhalten eines angeklickten Links, nämlich das Öffnen der URL im gleichen oder einem neuen Tab. Dadurch können wir anpassen, wie sich der Link verhält, z. B. stattdessen ein Popup öffnen. |
querySelectorAll() | Das data-popup-Attribut wählt alle Ankerelemente aus (). Diese Methode gibt eine NodeList zurück, die es uns ermöglicht, Ereignis-Listener gleichzeitig auf mehrere Komponenten anzuwenden. |
forEach() | Jeder von querySelectorAll() erstellte Eintrag in der NodeList erhält eine Aktion (z. B. das Anhängen eines Ereignis-Listeners). Dies gilt für die Verwaltung vieler dynamischer Linkelemente in PnP Modern Search. |
addEventListener() | Diese Technik fügt jedem Link einen Klickereignis-Listener hinzu, der die Funktion openInPopup() auslöst. Dies ist erforderlich, um das standardmäßige Klickverhalten zu überschreiben. |
import { override } | Dieser Dekorator ist Teil des SharePoint-Frameworks (SPFx) und wird verwendet, um das Standardverhalten von SPFx-WebParts zu überschreiben. Es ermöglicht spezifische Anpassungen, z. B. das Einfügen von JavaScript, um Popup-Funktionalität bereitzustellen. |
@override | In SPFx gibt ein Dekorator an, dass eine Methode oder Eigenschaft die Funktionalität außer Kraft setzt. Dies ist erforderlich, wenn Sie das Verhalten von SharePoint-Komponenten ändern. |
spyOn() | Überwacht Funktionsaufrufe während Unit-Tests mit Jasmine. In diesem Szenario wird es mit window.open() verwendet, um sicherzustellen, dass das Popup während des Tests ordnungsgemäß gestartet wird. |
expect() | Dieser Befehl wird für Unit-Tests in Jasmine verwendet. Es prüft, ob window.open() mit den richtigen Argumenten aufgerufen wurde, und stellt so sicher, dass das Popup mit den gewünschten Einstellungen erscheint. |
Verständnis der Popup-Fensterlösung in SPFx
Lösung 1: Verwenden von JavaScript „window.open“ zum Erstellen eines Popup-Fensters
<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ösung 2: Inline-JavaScript direkt in das Link-Tag einfügen
<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ösung 3: Backend-Ansatz mit SPFx mit 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 für JavaScript-Popup-Verhalten
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));
});
});
Erkunden der Ereignisbehandlung und der dynamischen JavaScript-Injektion in SPFx
Wichtige Erkenntnisse für die Implementierung von Popup-Fenstern in SPFx
Referenzen und Ressourcen
- Informationen zum PnP Modern Search WebPart (SPFx) und zum Anpassen des Linkverhaltens wurden der offiziellen Dokumentation entnommen. Weitere Informationen finden Sie unter GitHub-Repository für moderne PnP-Suche .
- Anleitung zur Verwendung von JavaScript-Methoden wie z window.open() und Ereignis-Listener wurden von der referenziert MDN-Webdokumente für JavaScript.
- Details zu SharePoint Framework (SPFx)-Anpassungen, einschließlich JavaScript-Injection und @override, finden Sie in der Übersicht über das SharePoint-Framework .