تحسين تجربة المستخدم من خلال الروابط المنبثقة المخصصة في SPFx
في تطوير SharePoint الحديث، يمكن أن يؤدي استخدام PnP Modern Search WebPart (SPFx) لتوفير نتائج بحث قابلة للتكوين إلى تحسين تجربة المستخدم بشكل كبير. يعد التحكم في كيفية فتح الروابط ميزة شائعة بين المطورين، خاصة مع تخطيط "القائمة التفصيلية". عادةً ما يتم فتح الروابط في علامة تبويب جديدة، ولكن ماذا لو أردنا فتحها في نافذة منبثقة؟
في هذا المنشور، سنلقي نظرة على كيفية تنفيذ هذه الوظيفة عن طريق تغيير سلوك الارتباط الخاص بـ PnP Modern Search WebPart. بدلاً من فتح نتائج البحث في علامة تبويب جديدة، سنعرض كيفية فرض فتح الرابط في نافذة منبثقة مخصصة، مما يؤدي إلى تجربة مستخدم أكثر تكاملاً.
ينشأ التحدي عند استخدام صيغة مثل ``، والتي يتم تعيينها افتراضيًا على علامة تبويب جديدة. ومع ذلك، باستخدام JavaScript، يمكننا تجاوز هذا السلوك وفتح الرابط في نافذة منبثقة يتم التحكم فيها. يتيح ذلك مزيدًا من المرونة في عرض المحتوى خلال جلسة التصفح نفسها.
يأمر | مثال للاستخدام |
---|---|
window.open() | سيفتح هذا الأمر نافذة أو علامة تبويب متصفح جديدة. تفتح هذه الطريقة نافذة منبثقة بأبعاد وخصائص معينة، مثل العرض والارتفاع وأشرطة التمرير. |
event.preventDefault() | يمنع السلوك الافتراضي للارتباط الذي تم النقر عليه، وهو فتح عنوان URL في نفس علامة التبويب أو علامة التبويب الجديدة. يتيح لنا هذا تخصيص كيفية عمل الرابط، مثل فتح نافذة منبثقة بدلاً من ذلك. |
querySelectorAll() | تحدد سمة البيانات المنبثقة جميع عناصر الربط (). تُرجع هذه الطريقة قائمة NodeList، والتي تسمح لنا بتطبيق مستمعي الأحداث على عدة مكونات في وقت واحد. |
forEach() | يتلقى كل إدخال في NodeList الذي تم إنتاجه بواسطة querySelectorAll() إجراءً (على سبيل المثال، إرفاق مستمع للحدث). ينطبق هذا على إدارة العديد من عناصر الارتباط الديناميكي في PnP Modern Search. |
addEventListener() | تضيف هذه التقنية مستمعًا لحدث النقر إلى كل رابط يقوم بتشغيل وظيفة openInPopup(). يعد ذلك ضروريًا لتجاوز سلوك النقر الافتراضي. |
import { override } | يعد هذا الديكور جزءًا من SharePoint Framework (SPFx) ويستخدم لتجاوز السلوك الافتراضي لـ SPFx WebParts. فهو يتيح تخصيصات محددة، مثل إدخال JavaScript لتوفير وظيفة النوافذ المنبثقة. |
@override | في SPFx، يشير الديكور إلى أن الطريقة أو الخاصية تتجاوز الوظيفة. يعد ذلك ضروريًا عند تعديل سلوك مكونات SharePoint. |
spyOn() | يراقب استدعاءات الوظائف أثناء اختبار الوحدة باستخدام Jasmine. في هذا السيناريو، يتم استخدامه مع window.open() لضمان تشغيل النافذة المنبثقة بشكل مناسب أثناء الاختبار. |
expect() | يستخدم هذا الأمر لاختبار الوحدة في الياسمين. فهو يتحقق من استدعاء window.open() باستخدام الوسائط الصحيحة، مما يضمن ظهور النافذة المنبثقة بالإعدادات المطلوبة. |
فهم حل النافذة المنبثقة في SPFx
الحل 1: استخدام JavaScript "window.open" لإنشاء نافذة منبثقة
<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: إضافة JavaScript مضمن مباشرة إلى علامة الارتباط
<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: نهج الواجهة الخلفية باستخدام SPFx مع حقن 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');
}
اختبار الوحدة لسلوك النوافذ المنبثقة في 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));
});
});
استكشاف التعامل مع الأحداث وإدخال JavaScript الديناميكي في SPFx
الوجبات السريعة الرئيسية لتنفيذ النوافذ المنبثقة في SPFx
المراجع والموارد
- تم الحصول على المعلومات المتعلقة بـ PnP Modern Search WebPart (SPFx) وتخصيص سلوك الارتباط من الوثائق الرسمية. لمزيد من التفاصيل، قم بزيارة مستودع GitHub للبحث الحديث PnP .
- إرشادات حول استخدام أساليب JavaScript مثل نافذة.فتح() وتمت الإشارة إلى مستمعي الأحداث من مستندات ويب MDN لجافا سكريبت.
- تفاصيل حول تخصيصات SharePoint Framework (SPFx)، بما في ذلك حقن JavaScript و @تجاوز، يمكن العثور عليها في نظرة عامة على إطار SharePoint .