هل يمكنني إجبار جميع الروابط بمعالجة WebView (أو الإطار) كمسارات مطلقة؟
-
16-09-2019 - |
سؤال
لذلك أنا أعمل مع WebKit - WebView وإلكترونيا. يمكنني استخدام NSurLProtocol مخصص لاسترداد HTML لكل طلب من قاعدة بيانات. تنشأ المشكلة من حقيقة أن الروابط في أتش تي أم أل كلها نسبة نسبية، عندما يجب أن تكون حقا مطلقة. على سبيل المثال، الصفحة
foo/bar.html
قد يكون لديك رابط في ذلك يشير إلى
foo/baz.html
المشكلة هي أنه نظرا لأن الرابط قريب، ينتهي الطلب يجري
/foo/foo/baz.html
حتى الآن، حاولت أن أعمل بهذا من خلال مقارنة عناوين URL وتقليد البادئة المشتركة - في هذه الحالة "FOO /" - تاركيني مع Foo / Baz.html. هذا لا يعمل لجميع الاحتمالات، خاصة عندما يكون هناك أدلة متعددة في المسار. أقوم بذلك في "didstartprovisionalloadframe:" طريقة frameloaddelegate الخاص بي.
لسوء الحظ، ليس لدي سيطرة على HTML الذي أعرضه، لذلك تعديل الارتباطات بأنها ليست خيارا.
المحلول
حاول أن تكون مندوب تحميل الموارد الإطار الرئيسي، والتنفيذ webView:resource:willSendRequest:redirectResponse:fromDataSource:
لتعديل عنوان URL الذي يتم طلبه. يرسل relativeString
إلى عنوان URL الخاص بالطلب للحصول على عنوان URL النسبي الأصلي، ثم استخدم -[NSURL initWithString:baseURL:]
لإنشاء عنوان URL جديد مع نفس السلسلة النسبية مقابل عنوان URL الأساسي الصحيح.