عندما تقوم بتحميل صفحة ويب في WKWebView
وترغب في اكتشاف عندما يقوم المستخدم بالنقر على زر معين، يمكنك استخدام معالج الرسائل الجافا سكريبت (JavaScript) لتنفيذ ذلك. على الرغم من أن decidePolicyForNavigationAction
لا يتم تشغيله لأن النقرة ليست عملية تنقل، إلا أنه يمكنك تضمين رمز جافا سكريبت يتصل بمعالج الرسائل الجافا سكريبت الخاص بك.
لتحقيق ذلك، يمكنك إضافة معالج رسائل جافا سكريبت لوحدة التحكم في محتوى المستخدم (user content controller
) لـ WKWebView
الخاص بك. بالنظر إلى أنك لا تمتلك صفحة الويب، يمكنك استخدام جافا سكريبت لتفعيل إرسال رسالة بعد النقر على الزر، ثم يمكن لمعالج الرسائل في تطبيقك التقاط هذه الرسالة.
في هذا السياق، يمكنك استخدام الشيفرة التالية في الجافا سكريبت لإرسال رسالة عبر window.webkit.messageHandlers
عند النقر على الزر:
javascriptdocument.querySelector('.deploy-button').addEventListener('click', function() {
window.webkit.messageHandlers.buttonClicked.postMessage('messageToPost');
});
بمجرد تضمين هذا الكود في صفحة الويب المحملة في WKWebView
، سيتم إرسال رسالة 'messageToPost'
عبر معالج الرسائل الجافا سكريبت الخاص بتطبيقك عند النقر على الزر المعين.
ثم، في تطبيقك بلغة Swift (أو Objective-C)، يمكنك تحديد معالج الرسائل للتقاط هذه الرسالة واتخاذ الإجراءات المناسبة، مثل هذا:
swiftwebView.configuration.userContentController.add(self, name: "buttonClicked")
extension YourViewController: WKScriptMessageHandler {
func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
if message.name == "buttonClicked", let messageBody = message.body as? String {
// Perform actions upon receiving the message
print("Button clicked: \(messageBody)")
}
}
}
بهذه الطريقة، يمكنك الآن اكتشاف النقرات على الأزرار غير الملاحة في WKWebView
واتخاذ الإجراءات المناسبة داخل تطبيقك.
المزيد من المعلومات
بالطبع، دعني أوسع على الموضوع.
بعد أن تم تضمين الشيفرة الجافا سكريبت في صفحة الويب وتم تحديد معالج الرسائل في تطبيقك، يمكنك الآن تنفيذ أي سلوك تريده عندما يقوم المستخدم بالنقر على الزر المحدد.
مثلاً، يمكنك تحديد عملية معينة عندما يتم النقر على الزر. قد ترغب في تنفيذ دالة تقوم بإرسال بيانات معينة إلى الخادم أو تنفيذ إجراء معين داخل التطبيق.
لنفترض أنك تريد تغيير لون خلفية التطبيق عندما يتم النقر على الزر. يمكنك القيام بذلك على سبيل المثال كما يلي:
swiftextension YourViewController: WKScriptMessageHandler {
func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
if message.name == "buttonClicked", let messageBody = message.body as? String {
// Change background color upon receiving the message
self.view.backgroundColor = UIColor.blue
}
}
}
هنا، عندما يتم النقر على الزر، ستقوم دالة didReceive
بتغيير لون خلفية التطبيق إلى الأزرق. يمكنك بالطبع تغيير هذا السلوك ليتناسب مع متطلبات تطبيقك.
وبهذا، يمكنك الآن الكشف عن النقرات على الأزرار غير الملاحة في WKWebView
وتنفيذ الإجراءات المناسبة في تطبيقك، مما يسمح لك بتحسين تجربة المستخدم وتخصيص التطبيق بشكل أفضل لتلبية احتياجاتك ومتطلبات عملائك.