Améliorer l'expérience utilisateur avec des liens contextuels personnalisés dans SPFx
Dans le développement SharePoint moderne, l’utilisation du PnP Modern Search WebPart (SPFx) pour fournir des résultats de recherche configurables peut améliorer considérablement l’expérience utilisateur. Contrôler la façon dont les liens s'ouvrent est une fonctionnalité populaire parmi les développeurs, en particulier avec la présentation « Liste détaillée ». Normalement, les liens s'ouvrent dans un nouvel onglet, mais que se passe-t-il si nous voulons les ouvrir dans une fenêtre contextuelle ?
Dans cet article, nous verrons comment implémenter cette fonctionnalité en modifiant le comportement des liens du WebPart PnP Modern Search. Plutôt que d'ouvrir les résultats de la recherche dans un nouvel onglet, nous montrerons comment forcer l'ouverture du lien dans une fenêtre contextuelle personnalisée, ce qui permettra une expérience utilisateur plus intégrée.
Le défi se pose lorsque vous utilisez une formule comme ``, qui par défaut est un nouvel onglet. Cependant, en utilisant JavaScript, nous pouvons remplacer ce comportement et ouvrir le lien dans une fenêtre contextuelle contrôlée. Cela permet plus de flexibilité dans l’affichage du contenu au sein de la même session de navigation.
Commande | Exemple d'utilisation |
---|---|
window.open() | Cette commande ouvrira une nouvelle fenêtre ou un nouvel onglet de navigateur. Cette méthode ouvre une fenêtre contextuelle avec certaines dimensions et propriétés, telles que la largeur, la hauteur et les barres de défilement. |
event.preventDefault() | Empêche le comportement par défaut d'un lien cliqué, qui consiste à ouvrir l'URL dans le même onglet ou dans un nouvel onglet. Cela nous permet de personnaliser le fonctionnement du lien, par exemple en ouvrant une fenêtre contextuelle. |
querySelectorAll() | L'attribut data-popup sélectionne tous les éléments d'ancrage (). Cette méthode renvoie une NodeList, qui nous permet d'appliquer des écouteurs d'événements à plusieurs composants simultanément. |
forEach() | Chaque entrée de la NodeList produite par querySelectorAll() reçoit une action (par exemple, attacher un écouteur d'événement). Cela s'applique à la gestion de nombreux éléments de lien dynamique dans PnP Modern Search. |
addEventListener() | Cette technique ajoute un écouteur d'événement de clic à chaque lien qui déclenche la fonction openInPopup(). Ceci est nécessaire pour remplacer le comportement de clic par défaut. |
import { override } | Ce décorateur fait partie de SharePoint Framework (SPFx) et est utilisé pour remplacer le comportement par défaut de SPFx WebParts. Il permet des personnalisations spécifiques, telles que l'injection de JavaScript pour fournir une fonctionnalité contextuelle. |
@override | Dans SPFx, un décorateur indique qu'une méthode ou une propriété remplace la fonctionnalité. Ceci est nécessaire lors de la modification du comportement des composants SharePoint. |
spyOn() | Surveille les appels de fonction pendant les tests unitaires avec Jasmine. Dans ce scénario, il est utilisé avec window.open() pour garantir que la fenêtre contextuelle est lancée correctement pendant les tests. |
expect() | Cette commande est utilisée pour les tests unitaires dans Jasmine. Il vérifie que window.open() a été appelé avec les arguments corrects, garantissant que la fenêtre contextuelle apparaît avec les paramètres souhaités. |
Comprendre la solution de fenêtre contextuelle dans SPFx
Solution 1 : Utiliser JavaScript `window.open` pour créer une fenêtre contextuelle
<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>
Solution 2 : ajout de JavaScript en ligne directement dans la balise de lien
<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.
Solution 3 : approche backend utilisant SPFx avec injection 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 unitaire pour le comportement des fenêtres contextuelles 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));
});
});
Explorer la gestion des événements et l'injection dynamique de JavaScript dans SPFx
Points clés à retenir pour la mise en œuvre de fenêtres contextuelles dans SPFx
Références et ressources
- Les informations concernant le PnP Modern Search WebPart (SPFx) et la personnalisation du comportement des liens proviennent de la documentation officielle. Pour plus de détails, visitez le Référentiel GitHub de recherche moderne PnP .
- Conseils sur l'utilisation des méthodes JavaScript telles que fenêtre.open() et les auditeurs d'événements ont été référencés à partir du Documents Web MDN pour JavaScript.
- Détails sur les personnalisations de SharePoint Framework (SPFx), y compris l'injection JavaScript et @outrepasser, peut être trouvé dans le Présentation du framework SharePoint .