Vylepšení uživatelské zkušenosti pomocí vlastních vyskakovacích odkazů v SPFx
V moderním vývoji SharePointu může použití PnP Modern Search WebPart (SPFx) k poskytování konfigurovatelných výsledků vyhledávání výrazně zlepšit uživatelskou zkušenost. Ovládání otevírání odkazů je mezi vývojáři oblíbenou funkcí, zejména s rozložením „Podrobný seznam“. Normálně se odkazy otevírají na nové kartě, ale co když je chceme otevřít ve vyskakovacím okně?
V tomto příspěvku se podíváme na to, jak implementovat tuto funkci změnou chování odkazu webové části PnP Modern Search. Namísto otevírání výsledků vyhledávání na nové kartě si ukážeme, jak vynutit otevření odkazu v přizpůsobeném vyskakovacím okně, což povede k integrovanějšímu uživatelskému dojmu.
Problém nastává, když použijete vzorec jako ``, který jako výchozí použije novou kartu. Pomocí JavaScriptu však můžeme toto chování přepsat a otevřít odkaz v řízeném vyskakovacím okně. To umožňuje větší flexibilitu při zobrazování obsahu v rámci stejné relace prohlížení.
Příkaz | Příklad použití |
---|---|
window.open() | Tento příkaz otevře nové okno nebo kartu prohlížeče. Tato metoda otevře vyskakovací okno s určitými rozměry a vlastnostmi, jako je šířka, výška a posuvníky. |
event.preventDefault() | Zabrání výchozímu chování odkazu, na který kliknete, což znamená otevření adresy URL na stejné nebo nové kartě. To nám umožňuje přizpůsobit, jak odkaz funguje, například místo toho otevřít vyskakovací okno. |
querySelectorAll() | Atribut data-popup vybere všechny kotevní prvky (). Tato metoda vrací NodeList, což nám umožňuje aplikovat posluchače událostí na několik komponent současně. |
forEach() | Každá položka v seznamu NodeList vytvořená pomocí querySelectorAll() obdrží akci (například připojení posluchače událostí). To platí pro správu mnoha prvků dynamických odkazů v PnP Modern Search. |
addEventListener() | Tato technika přidá posluchač události kliknutí ke každému odkazu, který spouští funkci openInPopup(). Je to nezbytné pro přepsání výchozího chování kliknutí. |
import { override } | Tento dekorátor je součástí SharePoint Framework (SPFx) a používá se k přepsání výchozího chování SPFx WebParts. Umožňuje specifická přizpůsobení, jako je vkládání JavaScriptu pro poskytování funkcí vyskakovacích oken. |
@override | V SPFx dekorátor označuje, že metoda nebo vlastnost má přednost před funkčností. To je nezbytné při úpravě chování součástí SharePointu. |
spyOn() | Monitoruje volání funkcí během testování jednotky pomocí Jasmine. V tomto scénáři se používá s window.open() k zaručení správného spuštění vyskakovacího okna během testování. |
expect() | Tento příkaz se používá pro testování jednotek v Jasmine. Kontroluje, že window.open() byla volána se správnými argumenty, což zaručuje, že se vyskakovací okno objeví s požadovaným nastavením. |
Porozumění řešení vyskakovacích oken v SPFx
Řešení 1: Použití JavaScriptu `window.open` k vytvoření vyskakovacího okna
<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>
Řešení 2: Přidání inline JavaScriptu přímo do značky odkazu
<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.
Řešení 3: Backendový přístup pomocí SPFx s 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 pro chování vyskakovacího okna JavaScriptu
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));
});
});
Zkoumání Event Handling a Dynamic JavaScript Injection v SPFx
Klíčové poznatky pro implementaci vyskakovacích oken v SPFx
Reference a zdroje
- Informace týkající se PnP Modern Search WebPart (SPFx) a přizpůsobení chování odkazů byly získány z oficiální dokumentace. Pro více podrobností navštivte PnP moderní vyhledávací úložiště GitHub .
- Pokyny k používání metod JavaScriptu, jako je např window.open() a posluchači událostí byli odkazováni z Webové dokumenty MDN pro JavaScript.
- Podrobnosti o přizpůsobení SharePoint Framework (SPFx), včetně vkládání JavaScriptu a @override, lze nalézt v Přehled rozhraní SharePoint .