Meningkatkan Pengalaman Pengguna dengan Tautan Popup Khusus di SPFx
Dalam pengembangan SharePoint modern, menggunakan PnP Modern Search WebPart (SPFx) untuk memberikan hasil pencarian yang dapat dikonfigurasi dapat meningkatkan pengalaman pengguna secara signifikan. Mengontrol bagaimana tautan terbuka adalah fitur yang populer di kalangan pengembang, terutama dengan tata letak "Daftar Terperinci". Biasanya, link terbuka di tab baru, tapi bagaimana jika kita ingin membukanya di jendela popup?
Dalam postingan ini, kita akan melihat cara mengimplementasikan fungsi ini dengan mengubah perilaku tautan dari PnP Modern Search WebPart. Daripada membuka hasil pencarian di tab baru, kami akan menunjukkan cara memaksa tautan terbuka di jendela popup yang disesuaikan, sehingga menghasilkan pengalaman pengguna yang lebih terintegrasi.
Tantangan muncul saat Anda menggunakan rumus seperti ``, yang defaultnya adalah tab baru. Namun, dengan menggunakan JavaScript, kita dapat mengesampingkan perilaku ini dan membuka tautan di jendela popup yang terkontrol. Hal ini memungkinkan lebih banyak fleksibilitas dalam menampilkan konten dalam sesi penelusuran yang sama.
Memerintah | Contoh Penggunaan |
---|---|
window.open() | Perintah ini akan membuka jendela atau tab browser baru. Cara ini membuka jendela popup dengan dimensi dan properti tertentu, seperti lebar, tinggi, dan scrollbar. |
event.preventDefault() | Mencegah perilaku default tautan yang diklik, yaitu membuka URL di tab yang sama atau baru. Ini memungkinkan kami menyesuaikan cara kerja tautan, seperti membuka popup. |
querySelectorAll() | Atribut data-popup memilih semua elemen jangkar (). Metode ini mengembalikan NodeList, yang memungkinkan kita menerapkan event pendengar ke beberapa komponen secara bersamaan. |
forEach() | Setiap entri di NodeList yang dihasilkan oleh querySelectorAll() menerima tindakan (misalnya, melampirkan pendengar acara). Ini berlaku untuk mengelola banyak elemen tautan dinamis di PnP Modern Search. |
addEventListener() | Teknik ini menambahkan event pendengar klik ke setiap tautan yang memicu fungsi openInPopup(). Hal ini diperlukan untuk mengesampingkan perilaku klik default. |
import { override } | Dekorator ini adalah bagian dari SharePoint Framework (SPFx) dan digunakan untuk mengganti perilaku default SPFx WebParts. Ini memungkinkan penyesuaian tertentu, seperti memasukkan JavaScript untuk menyediakan fungsionalitas popup. |
@override | Di SPFx, dekorator menunjukkan bahwa suatu metode atau properti mengesampingkan fungsionalitas. Hal ini diperlukan ketika mengubah perilaku komponen SharePoint. |
spyOn() | Memantau panggilan fungsi selama pengujian unit dengan Jasmine. Dalam skenario ini, digunakan dengan window.open() untuk menjamin bahwa popup diluncurkan dengan benar selama pengujian. |
expect() | Perintah ini digunakan untuk pengujian unit di Jasmine. Ia memeriksa apakah window.open() dipanggil dengan argumen yang benar, menjamin bahwa popup muncul dengan pengaturan yang diinginkan. |
Memahami Solusi Jendela Popup di SPFx
Solusi 1: Menggunakan JavaScript `window.open` untuk Membuat Jendela Popup
<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>
Solusi 2: Menambahkan JavaScript Inline Langsung ke Tag Tautan
<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.
Solusi 3: Pendekatan Backend Menggunakan SPFx dengan Injeksi 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');
}
Tes Unit untuk Perilaku Popup 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));
});
});
Menjelajahi Penanganan Peristiwa dan Injeksi JavaScript Dinamis di SPFx
Poin Penting untuk Menerapkan Jendela Popup di SPFx
Referensi dan Sumber Daya
- Informasi mengenai PnP Modern Search WebPart (SPFx) dan penyesuaian perilaku tautan bersumber dari dokumentasi resmi. Untuk lebih jelasnya, kunjungi Repositori GitHub Pencarian Modern PnP .
- Panduan dalam menggunakan metode JavaScript seperti jendela.buka() dan pendengar acara direferensikan dari Dokumen Web MDN untuk JavaScript.
- Detail tentang kustomisasi SharePoint Framework (SPFx), termasuk injeksi JavaScript dan @mengesampingkan, dapat ditemukan di Ikhtisar Kerangka SharePoint .