Mejora de la experiencia del usuario con enlaces emergentes personalizados en SPFx
En el desarrollo moderno de SharePoint, el uso del elemento web de búsqueda moderna PnP (SPFx) para proporcionar resultados de búsqueda configurables puede mejorar significativamente la experiencia del usuario. Controlar cómo se abren los enlaces es una característica popular entre los desarrolladores, especialmente con el diseño de "Lista detallada". Normalmente los enlaces se abren en una nueva pestaña, pero ¿y si queremos abrirlos en una ventana emergente?
En esta publicación, veremos cómo implementar esta funcionalidad cambiando el comportamiento del vínculo del elemento web de búsqueda moderna PnP. En lugar de abrir los resultados de la búsqueda en una nueva pestaña, mostraremos cómo forzar la apertura del enlace en una ventana emergente personalizada, lo que dará como resultado una experiencia de usuario más integrada.
El desafío surge cuando se utiliza una fórmula como ``, que por defecto es una nueva pestaña. Sin embargo, al usar JavaScript, podemos anular este comportamiento y abrir el enlace en una ventana emergente controlada. Esto permite una mayor flexibilidad a la hora de mostrar contenido dentro de la misma sesión de navegación.
Lo guiaremos a través de los pasos necesarios para desarrollar esta función, centrándonos en el uso de JavaScript y SPFx para mejorar el diseño de la lista detallada. Manténgase atento mientras analizamos la solución para garantizar que su sitio de SharePoint sea perfecto y fácil de usar.
Dominio | Ejemplo de uso |
---|---|
window.open() | Este comando abrirá una nueva ventana o pestaña del navegador. Este método abre una ventana emergente con ciertas dimensiones y propiedades, como ancho, alto y barras de desplazamiento. |
event.preventDefault() | Impide el comportamiento predeterminado de un enlace en el que se hace clic, que es abrir la URL en la misma pestaña o en una nueva. Esto nos permite personalizar cómo actúa el enlace, como abrir una ventana emergente. |
querySelectorAll() | El atributo emergente de datos selecciona todos los elementos de anclaje (). Este método devuelve una NodeList, que nos permite aplicar detectores de eventos a varios componentes simultáneamente. |
forEach() | Cada entrada en NodeList producida por querySelectorAll() recibe una acción (por ejemplo, adjuntar un detector de eventos). Esto se aplica a la gestión de muchos elementos de vínculos dinámicos en PnP Modern Search. |
addEventListener() | Esta técnica agrega un detector de eventos de clic a cada enlace que activa la función openInPopup(). Es necesario para anular el comportamiento de clic predeterminado. |
import { override } | Este decorador forma parte de SharePoint Framework (SPFx) y se utiliza para anular el comportamiento predeterminado de SPFx WebParts. Permite personalizaciones específicas, como inyectar JavaScript para proporcionar funcionalidad emergente. |
@override | En SPFx, un decorador indica que un método o propiedad anula la funcionalidad. Esto es necesario al modificar el comportamiento de los componentes de SharePoint. |
spyOn() | Supervisa las llamadas a funciones durante las pruebas unitarias con Jasmine. En este escenario, se utiliza con window.open() para garantizar que la ventana emergente se inicie correctamente durante la prueba. |
expect() | Este comando se utiliza para pruebas unitarias en Jasmine. Comprueba que se llamó a window.open() con los argumentos correctos, garantizando que la ventana emergente aparezca con la configuración deseada. |
Comprender la solución de ventana emergente en SPFx
Los scripts enumerados anteriormente ajustan el comportamiento predeterminado de los enlaces dentro de un WebPart de búsqueda moderna (SPFx) PnP. De forma predeterminada, los enlaces utilizan el objetivo="_en blanco" etiqueta para abrir en una nueva pestaña. Sin embargo, el propósito aquí es abrir estos enlaces en una ventana emergente, aumentando así la interacción del usuario. Para lograr esto, utilizamos el ventana.abierta() función, que permite a los desarrolladores abrir URL en una nueva ventana o ventana emergente del navegador. Esta función se puede ajustar con parámetros específicos, como ancho, alto y otros atributos (como barras de desplazamiento o cambio de tamaño), para garantizar que la ventana emergente funcione según lo previsto.
Anular el comportamiento de clic predeterminado de las etiquetas de anclaje es un componente vital del enfoque. Esto se hace con evento.preventDefault(), lo que impide que el enlace se abra en una nueva pestaña. En su lugar, adjuntamos un detector de eventos al enlace, que activa una función personalizada (en este caso, abrir en ventana emergente()) que maneja el evento de clic y abre la URL en una ventana emergente. Esto permite a los desarrolladores tener más control sobre el comportamiento del vínculo y da como resultado una experiencia de usuario más consistente dentro del elemento web de búsqueda moderna de PnP.
Además de abordar el comportamiento del front-end, también examinamos un enfoque de backend utilizando los decoradores integrados de SPFx como @anular. Este enfoque permite a los desarrolladores insertar JavaScript directamente en WebParts personalizados, modificando aún más el comportamiento de los resultados de búsqueda. Anular el proceso de renderizado en SPFx nos permite inyectar código JavaScript que maneja los clics en los enlaces y abre el material necesario en una ventana emergente. Esta técnica hace que la solución sea más modular y reutilizable en múltiples áreas de un entorno de SharePoint, mejorando así el mantenimiento.
Las pruebas unitarias son fundamentales para garantizar que la función emergente funcione correctamente en múltiples entornos y navegadores. Usando espiar() en un marco de pruebas de Jasmine valida que el ventana.abierta() El método se ejecuta con los argumentos correctos. Esta forma de prueba identifica problemas potenciales en las primeras etapas del proceso de desarrollo y garantiza que las ventanas emergentes funcionen según lo planeado. Esta solución fortalece las interacciones de los usuarios en el elemento web de búsqueda moderna PnP de SharePoint al integrar el manejo de eventos de front-end, la personalización de backend y las pruebas unitarias.
Solución 1: usar JavaScript `window.open` para crear una ventana emergente
Este enfoque utiliza JavaScript para reemplazar el comportamiento predeterminado de abrir un vínculo en una nueva pestaña con una ventana emergente, lo cual es ideal para soluciones front-end dinámicas creadas con SPFx en un contexto de SharePoint.
<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ón 2: agregar JavaScript en línea directamente a la etiqueta de enlace
Este método incorpora JavaScript en línea dentro de la etiqueta de enlace HTML, lo que lo hace ideal para un sistema front-end dinámico y liviano que tiene pocas dependencias externas.
<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ón 3: Enfoque de backend usando SPFx con inyección de JavaScript
Este enfoque utiliza SharePoint Framework (SPFx) para inyectar JavaScript en un WebPart personalizado, lo que permite que los vínculos se abran en una ventana emergente utilizando métodos 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');
}
Prueba unitaria para el comportamiento de la ventana emergente de JavaScript
Las pruebas unitarias pueden garantizar que la funcionalidad de la ventana emergente sea coherente en todos los navegadores y entornos. Aquí hay una prueba básica de Jasmine para la validación frontal.
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));
});
});
Explorando el manejo de eventos y la inyección dinámica de JavaScript en SPFx
Cuando se trabaja con PnP Modern Search WebPart (SPFx), una característica útil para los desarrolladores es la capacidad de ajustar dinámicamente cómo se comportan los elementos, como los enlaces. El uso del manejo de eventos de JavaScript proporciona una gran cantidad de opciones para personalizar las interacciones del usuario. El uso de detectores de eventos para capturar y controlar los clics en enlaces crea una experiencia más interactiva. Al capturar eventos de clic, podemos anular el comportamiento normal y abrir las URL en una ventana emergente controlada. Esto garantiza una transición fluida sin alterar la pestaña o ventana actual del usuario.
La personalización de enlaces en SPFx WebParts también requiere la inserción dinámica de código JavaScript. SharePoint Framework (SPFx) proporciona métodos como @anular y prestar() por lograr esto. Al insertar JavaScript personalizado, los desarrolladores pueden cambiar el comportamiento de los elementos de los resultados de búsqueda sin tener que realizar modificaciones significativas en el propio WebPart. Esta flexibilidad facilita la realización de ajustes globales en todos los enlaces de resultados de búsqueda, lo que garantiza que el comportamiento deseado (como abrir en una ventana emergente) sea uniforme en toda la plataforma.
Finalmente, el rendimiento y la experiencia del usuario son factores críticos en cualquier sistema basado en web, y lo mismo ocurre aquí. Al optimizar el uso de JavaScript y limitar las actividades que consumen muchos recursos, podemos asegurar que estas personalizaciones no tengan una influencia significativa en los tiempos de carga de la página ni en la capacidad de respuesta. El uso eficiente de JavaScript, combinado con modificaciones de SPFx de backend, proporciona un alto nivel de flexibilidad sin sacrificar el rendimiento, lo que da como resultado una experiencia de usuario perfecta en toda la plataforma SharePoint.
Preguntas frecuentes sobre la personalización de SPFx para ventanas emergentes
- ¿Cómo abro un enlace en una ventana emergente con JavaScript?
- Puedes usar el window.open() función en JavaScript. Esta función le permite abrir una nueva ventana del navegador o ventana emergente con propiedades específicas como tamaño y barras de desplazamiento.
- ¿Qué hace? event.preventDefault() ¿hacer?
- El event.preventDefault() El método evita que un evento realice su acción predeterminada. En este caso, evita que el enlace se abra en una nueva pestaña y permite acciones específicas, como mostrar una ventana emergente.
- ¿Cómo aplico un comportamiento personalizado a numerosos enlaces en SPFx?
- Usando querySelectorAll() en JavaScript, puede elegir varios componentes y adjuntarles detectores de eventos, garantizando que todos sigan el mismo comportamiento.
- ¿Cómo anulo la representación predeterminada de SPFx WebParts?
- Para ajustar el comportamiento de SPFx WebParts, utilice el @override decorador. Esto le permite inyectar JavaScript personalizado directamente en el proceso de representación del WebPart.
- ¿Cuál es la mejor técnica para determinar si una ventana emergente se abre correctamente?
- Usando pruebas unitarias en un marco como Jasmine, puedes usar spyOn() para monitorear si el window.open() La función se llama apropiadamente con los parámetros anticipados.
Conclusiones clave para implementar ventanas emergentes en SPFx
La forma en que se abren los enlaces en una ventana emergente se puede personalizar usando JavaScript dentro del WebPart de búsqueda moderna de PnP (SPFx). Este cambio mejora la interacción del usuario al mantenerlo interesado en la pestaña actual y al mismo tiempo brindarle acceso a contenido detallado en una ventana emergente controlada.
Para mantener un comportamiento consistente, utilice técnicas como evento.preventDefault() e inyectar dinámicamente JavaScript en SPFx WebParts. Además, las pruebas unitarias ayudan a garantizar que estos cambios funcionen bien en muchos contextos, lo que da como resultado una solución confiable y fácil de usar para la personalización de los resultados de búsqueda de SharePoint.
Referencias y recursos
- La información sobre PnP Modern Search WebPart (SPFx) y la personalización del comportamiento de los enlaces se obtuvo de la documentación oficial. Para más detalles, visite el Repositorio GitHub de búsqueda moderna PnP .
- Orientación sobre el uso de métodos JavaScript como ventana.abierta() y los oyentes de eventos fueron referenciados desde el Documentos web de MDN para JavaScript.
- Detalles sobre las personalizaciones de SharePoint Framework (SPFx), incluida la inyección de JavaScript y @anular, se puede encontrar en el Descripción general del marco de SharePoint .