Zlepšenie používateľskej skúsenosti pomocou vlastných kontextových odkazov v SPFx
V modernom vývoji SharePointu môže používanie PnP Modern Search WebPart (SPFx) na poskytovanie konfigurovateľných výsledkov vyhľadávania výrazne zlepšiť používateľskú skúsenosť. Ovládanie otvárania odkazov je obľúbenou funkciou medzi vývojármi, najmä s rozložením „Podrobný zoznam“. Normálne sa odkazy otvárajú na novej karte, ale čo ak ich chceme otvoriť v kontextovom okne?
V tomto príspevku sa pozrieme na to, ako implementovať túto funkciu zmenou správania odkazu webovej časti PnP Modern Search WebPart. Namiesto otvárania výsledkov vyhľadávania na novej karte si ukážeme, ako vynútiť otvorenie odkazu v prispôsobenom kontextovom okne, čo vedie k integrovanejšej používateľskej skúsenosti.
Problém nastáva, keď použijete vzorec ako ``, ktorý je predvolene nastavený na novú kartu. Pomocou JavaScriptu však môžeme toto správanie prepísať a odkaz otvoriť v kontrolovanom vyskakovacom okne. To umožňuje väčšiu flexibilitu pri zobrazovaní obsahu v rámci rovnakej relácie prehliadania.
Príkaz | Príklad použitia |
---|---|
window.open() | Tento príkaz otvorí nové okno alebo kartu prehliadača. Táto metóda otvorí kontextové okno s určitými rozmermi a vlastnosťami, ako je šírka, výška a posuvníky. |
event.preventDefault() | Zabráni predvolenému správaniu odkazu, na ktorý sa klikne, čo znamená otvorenie adresy URL na rovnakej alebo novej karte. To nám umožňuje prispôsobiť spôsob fungovania odkazu, ako napríklad otvorenie kontextového okna. |
querySelectorAll() | Atribút data-popup vyberá všetky prvky kotvy (). Táto metóda vracia NodeList, čo nám umožňuje aplikovať poslucháčov udalostí na niekoľko komponentov súčasne. |
forEach() | Každá položka v zozname NodeList vytvorená pomocou querySelectorAll() dostane akciu (napríklad pripojenie poslucháča udalostí). Týka sa to správy mnohých prvkov dynamického prepojenia v modernom vyhľadávaní PnP. |
addEventListener() | Táto technika pridáva prijímač udalosti kliknutia ku každému odkazu, ktorý spúšťa funkciu openInPopup(). Je to nevyhnutné na prepísanie predvoleného kliknutia. |
import { override } | Tento dekorátor je súčasťou SharePoint Framework (SPFx) a používa sa na prepísanie predvoleného správania SPFx WebParts. Umožňuje špecifické prispôsobenia, ako napríklad vkladanie JavaScriptu na poskytovanie funkcií kontextových okien. |
@override | V SPFx dekorátor označuje, že metóda alebo vlastnosť má prednosť pred funkčnosťou. Je to potrebné pri úprave správania komponentov SharePointu. |
spyOn() | Monitoruje volania funkcií počas testovania jednotky s Jasmine. V tomto scenári sa používa s window.open(), aby sa zaručilo správne spustenie kontextového okna počas testovania. |
expect() | Tento príkaz sa používa na testovanie jednotiek v Jasmine. Skontroluje, či bola funkcia window.open() zavolaná so správnymi argumentmi, čo zaručuje, že sa kontextové okno zobrazí s požadovanými nastaveniami. |
Pochopenie riešenia kontextového okna v SPFx
Riešenie 1: Pomocou JavaScriptu `window.open` vytvorte kontextové okno
<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>
Riešenie 2: Pridanie vloženého JavaScriptu priamo 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.
Riešenie 3: Backendový prístup pomocou SPFx s vkladaním JavaScriptu
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 jednotky pre správanie kontextové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));
});
});
Skúmanie spracovania udalostí a dynamického vkladania JavaScriptu v SPFx
Kľúčové poznatky pre implementáciu kontextových okien v SPFx
Referencie a zdroje
- Informácie týkajúce sa PnP Modern Search WebPart (SPFx) a prispôsobenia správania odkazov boli získané z oficiálnej dokumentácie. Ďalšie podrobnosti nájdete na stránke PnP Modern Search GitHub Repository .
- Návod na používanie JavaScriptových metód ako napr window.open() a poslucháčov udalostí sa odvolávalo na Webové dokumenty MDN pre JavaScript.
- Podrobnosti o prispôsobeniach SharePoint Framework (SPFx) vrátane vstrekovania JavaScriptu a @override, možno nájsť v Prehľad rámca SharePoint .