Aprimorando a experiência do usuário com links pop-up personalizados no SPFx
No desenvolvimento moderno do SharePoint, usar o PnP Modern Search WebPart (SPFx) para fornecer resultados de pesquisa configuráveis pode melhorar significativamente a experiência do usuário. Controlar como os links abrem é um recurso popular entre os desenvolvedores, especialmente com o layout “Lista detalhada”. Normalmente, os links abrem em uma nova aba, mas e se quisermos abri-los em uma janela pop-up?
Nesta postagem, veremos como implementar essa funcionalidade alterando o comportamento do link da WebPart PnP Modern Search. Em vez de abrir os resultados da pesquisa em uma nova guia, mostraremos como forçar a abertura do link em uma janela pop-up personalizada, resultando em uma experiência de usuário mais integrada.
O desafio surge quando você usa uma fórmula como ``, cujo padrão é uma nova guia. Entretanto, usando JavaScript, podemos substituir esse comportamento e abrir o link em uma janela pop-up controlada. Isso permite mais flexibilidade na exibição de conteúdo na mesma sessão de navegação.
Comando | Exemplo de uso |
---|---|
window.open() | Este comando abrirá uma nova janela ou guia do navegador. Este método abre uma janela pop-up com determinadas dimensões e propriedades, como largura, altura e barras de rolagem. |
event.preventDefault() | Impede o comportamento padrão de um link clicado, que é abrir o URL na mesma ou em uma nova guia. Isso nos permite personalizar o funcionamento do link, como abrir um pop-up. |
querySelectorAll() | O atributo data-popup seleciona todos os elementos âncora (). Este método retorna um NodeList, que nos permite aplicar ouvintes de eventos a vários componentes simultaneamente. |
forEach() | Cada entrada no NodeList produzida por querySelectorAll() recebe uma ação (por exemplo, anexar um ouvinte de evento). Isso se aplica ao gerenciamento de muitos elementos de link dinâmico na Pesquisa Moderna PnP. |
addEventListener() | Esta técnica adiciona um ouvinte de evento click a cada link que aciona a função openInPopup(). É necessário substituir o comportamento de clique padrão. |
import { override } | Esse decorador faz parte da Estrutura do SharePoint (SPFx) e é usado para substituir o comportamento padrão dos WebParts SPFx. Ele permite personalizações específicas, como injeção de JavaScript para fornecer funcionalidade pop-up. |
@override | No SPFx, um decorador indica que um método ou propriedade substitui a funcionalidade. Isso é necessário ao modificar o comportamento dos componentes do SharePoint. |
spyOn() | Monitora chamadas de função durante testes de unidade com Jasmine. Neste cenário, é usado com window.open() para garantir que o pop-up seja iniciado adequadamente durante o teste. |
expect() | Este comando é usado para testes de unidade no Jasmine. Ele verifica se window.open() foi chamado com os argumentos corretos, garantindo que o popup apareça com as configurações desejadas. |
Compreendendo a solução de janela pop-up no SPFx
Solução 1: usando JavaScript `window.open` para criar uma janela pop-up
<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>
Solução 2: adicionar JavaScript embutido diretamente na tag do link
<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.
Solução 3: abordagem de back-end usando SPFx com injeção 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');
}
Teste de unidade para comportamento de pop-up 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));
});
});
Explorando manipulação de eventos e injeção dinâmica de JavaScript no SPFx
Principais vantagens para a implementação de janelas pop-up no SPFx
Referências e recursos
- As informações sobre o PnP Modern Search WebPart (SPFx) e a personalização do comportamento do link foram obtidas na documentação oficial. Para mais detalhes, visite o Repositório GitHub de pesquisa moderna PnP .
- Orientação sobre o uso de métodos JavaScript, como janela.open() e ouvintes de eventos foram referenciados no Documentos da Web do MDN para JavaScript.
- Detalhes sobre personalizações do SharePoint Framework (SPFx), incluindo injeção de JavaScript e @substituir, pode ser encontrado no Visão geral da estrutura do SharePoint .