SPFx'teki Özel Açılır Pencere Bağlantılarıyla Kullanıcı Deneyimini İyileştirme
Modern SharePoint geliştirmede, yapılandırılabilir arama sonuçları sağlamak için PnP Modern Arama Web Bölümünü (SPFx) kullanmak, kullanıcı deneyimini önemli ölçüde iyileştirebilir. Bağlantıların nasıl açılacağını kontrol etmek, özellikle "Ayrıntılı Liste" düzeniyle geliştiriciler arasında popüler bir özelliktir. Normalde bağlantılar yeni bir sekmede açılır, ancak bunları bir açılır pencerede açmak istersek ne olur?
Bu yazıda, PnP Modern Arama Web Bölümü'nün bağlantı davranışını değiştirerek bu işlevselliğin nasıl uygulanacağına bakacağız. Arama sonuçlarını yeni bir sekmede açmak yerine, bağlantıyı özelleştirilmiş bir açılır pencerede açılmaya nasıl zorlayacağımızı göstereceğiz, böylece daha entegre bir kullanıcı deneyimi elde edeceğiz.
Bu zorluk, varsayılan olarak yeni bir sekmeye ayarlanan `` gibi bir formül kullandığınızda ortaya çıkar. Ancak JavaScript kullanarak bu davranışı geçersiz kılabilir ve bağlantıyı kontrollü bir açılır pencerede açabiliriz. Bu, aynı tarama oturumunda içeriğin görüntülenmesinde daha fazla esneklik sağlar.
Emretmek | Kullanım Örneği |
---|---|
window.open() | Bu komut yeni bir tarayıcı penceresi veya sekmesi açacaktır. Bu yöntem genişlik, yükseklik ve kaydırma çubukları gibi belirli boyut ve özelliklere sahip bir açılır pencere açar. |
event.preventDefault() | Tıklanan bir bağlantının URL'yi aynı veya yeni sekmede açma şeklindeki varsayılan davranışını engeller. Bu, bağlantının nasıl davranacağını (örneğin bir açılır pencere açmak gibi) özelleştirmemize olanak tanır. |
querySelectorAll() | data-popup özelliği tüm bağlantı elemanlarını seçer (). Bu yöntem, olay dinleyicilerini aynı anda birden fazla bileşene uygulamamıza olanak tanıyan bir NodeList döndürür. |
forEach() | NodeList'te querySelectorAll() tarafından üretilen her giriş bir eylem alır (örneğin, bir olay dinleyicisinin eklenmesi). Bu, PnP Modern Arama'daki birçok dinamik bağlantı öğesinin yönetilmesi için geçerlidir. |
addEventListener() | Bu teknik, openInPopup() işlevini tetikleyen her bağlantıya bir tıklama olayı dinleyicisi ekler. Varsayılan tıklama davranışını geçersiz kılmak için gereklidir. |
import { override } | Bu dekoratör, SharePoint Framework'ün (SPFx) bir parçasıdır ve SPFx WebParts'ın varsayılan davranışını geçersiz kılmak için kullanılır. Açılır pencere işlevselliği sağlamak için JavaScript enjekte etmek gibi belirli özelleştirmelere olanak tanır. |
@override | SPFx'te bir dekoratör, bir yöntemin veya özelliğin işlevselliği geçersiz kıldığını belirtir. SharePoint bileşenlerinin davranışını değiştirirken bu gereklidir. |
spyOn() | Jasmine ile birim testi sırasında işlev çağrılarını izler. Bu senaryoda, açılır pencerenin test sırasında uygun şekilde başlatıldığını garanti etmek için window.open() ile birlikte kullanılır. |
expect() | Bu komut Jasmine'de birim testi için kullanılır. window.open() işlevinin doğru argümanlarla çağrıldığını kontrol ederek açılır pencerenin istenen ayarlarla görünmesini garanti eder. |
SPFx'teki Açılır Pencere Çözümünü Anlamak
1. Çözüm: Açılır Pencere Oluşturmak için JavaScript `window.open` Kullanımı
<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>
2. Çözüm: Satır İçi JavaScript'i Doğrudan Bağlantı Etiketine Ekleme
<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.
3. Çözüm: JavaScript Enjeksiyonu ile SPFx Kullanan Arka Uç Yaklaşımı
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');
}
JavaScript Açılır Pencere Davranışı için Birim Testi
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));
});
});
SPFx'te Olay İşleme ve Dinamik JavaScript Eklemeyi Keşfetmek
SPFx'te Açılır Pencereleri Uygulamaya İlişkin Temel Çıkarımlar
Referanslar ve Kaynaklar
- PnP Modern Arama Web Bölümü (SPFx) ve bağlantı davranışının özelleştirilmesiyle ilgili bilgiler resmi belgelerden alınmıştır. Daha fazla ayrıntı için şu adresi ziyaret edin: PnP Modern Arama GitHub Deposu .
- Aşağıdaki gibi JavaScript yöntemlerinin kullanımına ilişkin rehberlik pencere.open() ve olay dinleyicilerine şuradan başvurulmuştur: MDN Web Belgeleri JavaScript için.
- JavaScript ekleme ve dahil olmak üzere SharePoint Framework (SPFx) özelleştirmeleriyle ilgili ayrıntılar @geçersiz kıl, şurada bulunabilir: SharePoint Çerçevesine Genel Bakış .