سؤال

لدي عرض ويب في تطبيق iPhone الخاص بي، ولدي أيضًا بعض ملفات html داخل مجلد الموارد الخاص بي.عندما يتم تحميل تطبيقي، أقوم بتحميل صفحة من الموارد الخاصة بي إلى عرض الويب الخاص بي.ولكن، أحتاج إلى إنشاء روابط داخل عرض الويب الخاص بي تشير إلى بعض الموارد الأخرى (على سبيل المثال، الصور أو ملفات html الأخرى).مجرد القيام برابط نسبي لا يعمل:

<a href="OtherPage.html">Doesn't work</a>
هل كانت مفيدة؟

المحلول

وعند تحميل هذه الموارد، تحتاج إلى تعيين URL قاعدة. يمكنك القيام بذلك باستخدام الأسلوب:

- (void)loadHTMLString:(NSString *)string baseURL:(NSURL *)baseURL

... حيث baseURL سيكون URL ملف مجلد الموارد الخاصة بك.

نصائح أخرى

يبدو أن هناك القليل من الغموض وفقًا لـ ملاحظات إصدار iPhone SDK لنظام التشغيل iPhone 3.0:

مشكلة: لا يستطيع UIWebView تحميل الموارد المحلية في التطبيقات المبنية على الإصدار 3.0.

عند الاستخدام [UIWebView loadHTMLString:baseURL:], ، و HTML يجب ألا تشير السلسلة إلى محلي الموارد مع file:// مخطط.بدلاً من ذلك، قم بالدخول NULL أو أ file://عنوان URL لـ baseURL:, ، أو تضمين الموارد مباشرة في HTML مع <style> و <script> العلامات.

عادلة بما فيه الكفاية.لكن المرور في قضية قياسية file:// عنوان URL لـ baseURL لا يعمل تماما.لكن ...اتضح أنه إذا قمت بتغيير / ل // والمساحات ل %20, ، سيتم تعيينك!(استخدام %20 يبدو الأمر منطقيًا للغاية، لكن الجزء ذو الشرطة المائلة المزدوجة فاجأني.)

لنفترض أن لديك بالفعل NSString *markup يثبت.إليك كل ما تفعله.(لقد قمت بتغليف الكود هنا لسهولة القراءة.قد ترغب في إعادة البناء/التكيف حسب الذوق.)

 NSString *resourcePath = [[[[NSBundle mainBundle] resourcePath]
     stringByReplacingOccurrencesOfString:@"/" withString:@"//"]
     stringByReplacingOccurrencesOfString:@" " withString:@"%20"];
 [webView loadHTMLString:markup baseURL:[NSURL URLWithString:
     [NSString stringWithFormat:@"file:/%@//", resourcePath]]];

طالما تمت الإشارة إلى CSS وJavaScript والصور الخاصة بك باسم الملف وحده، فمن المفترض أن يؤدي ذلك إلى حل المشكلة في iPhone OS 3.0 حيث loadHTMLString:baseURL: تشعر بالقلق!

وأنا ثابتة: أنا استخدم هذا لBaseURL كما قلت أغسطس:

NSString *path = [[NSBundle mainBundle] bundlePath];
NSURL *baseURL = [NSURL fileURLWithPath:path];

وشكرا لك!

وهذا الرمز سيعود سلسلة مع URL من ملف يسمى "OtherPage.html" في دليل الموارد حزمة الخاص بك.

[[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"OtherPage" ofType:@"html"]] absoluteString]

وهذا عمل بالنسبة لي. وكانت بلدي ملفات HTML في مجلدات فرعية (وليس مجموعات) في مشروعي. صفحة HTML بلدي يسمى page01 والمجلد الفرعي هو أتش تي أم أل:

NSString *resourcePath = [[NSBundle mainBundle] resourcePath];
NSString *pathToHtml = @"html";
NSURL *baseURL = [[NSURL alloc] initFileURLWithPath:pathToHtml isDirectory:YES];

NSString *html = [NSString stringWithContentsOfFile:[[NSBundle mainBundle]    
                             pathForResource:@"page01" ofType:@"html"                                                               
                             inDirectory:@"html"] 
                         encoding:NSUTF8StringEncoding error:nil];
[webview loadHTMLString:html baseURL:baseURL];

وحاول تحميل OtherPage.html أولا. إذا كنت لا تستطيع بعد ذلك انها ليست هناك، وكنت قد غاب عن جزء من إضافته إلى المشروع. إذا كنت تستطيع، ثم قد يكون هناك مجرد خطأ مطبعي في الارتباط، أو baseURL يمكن أن يكون غير صحيح، كما ذكر أغسطس. عندما إنشاء ملف HTML مع الصور في أنه كان في ملف الموارد، فإنه سار على ما يرام فقط باستخدام

<img src="file.png">

ونلقي نظرة على كيفية فونغاب يفعل ذلك. هنا البرنامج التعليمي على الموارد المحلية على اي فون . الخطوة 11 قد يكون ما كنت إهمال.

وربما لديها ما تفعله مع baseurl: عندما كنت تحميل الموارد، وأنا استخدم هذا السطر:

[webView loadData:htmlData MIMEType:@"text/html" textEncodingName:@"UTF-8" baseURL:[NSURL URLWithString:@""]];

ونرى في النهاية، يقول baseURL: "". إذا كنت تأخذ من ذلك، فإنه لا يعمل (أعطال)، ولكن أنا لا أعرف الطريق إلى مواردي. إذا كان شخص ما لا .....؟

وبالنسبة لي كانت المشكلة أن الملفات شبيبة لم تدرج في الحزمة. تأكد من تحقق ذلك.

حسنًا ، هنا بعد 3.5 سنوات :) ...لقد جربت اقتراح مايكل جايلورد أعلاه بالضبط، لكنه لم يعمل في شرائح sim لإصدارات 5.0، 5.1، 6.0، 6.1 - ولا في الأجهزة الحقيقية التي تعمل بنفس الطريقة. لكن توضيح SO هذا حول مكان تجميع الموارد ( إلى أين يتجه بناء المخرجات؟ ) ساعد في جعل الأمر يعمل بالنسبة لي مثل هذا:

  1. قم بإنشاء مجلد Finder في المشروع (كما يقترح مايكل - ولم أحاول أيضًا استخدام "المجموعة")
  2. ضع HTML الخاص بك في هذا المجلد باستخدام Finder
  3. في استخدام Xcode ملف -> إضافة ملفات إلى المشروع
  4. تأكد من أن المشروع يدرك أنه يجب أن يكون في الحزمة عن طريق:

    1. انقر بزر الماوس الأيمن على هدف المشروع الرئيسي في الملاح نافذة او شباك،
    2. تأكد من تحديد الأهداف، و مراحل البناء فاتورة غير مدفوعة،
    3. انقر على انسخ موارد الحزمة شيء المثلث |>
    4. و - إليك ما هو مختلف عن مايكل - يجب أن يظهر بالفعل ملف html الخاص بك والمسار.(ربما قام XCoders بتحسين ملفات الإضافة AI :)

لذلك كل ما كان علي فعله هو النسخ - لصق كود مايكل أعلاه حرفيا وقم بتغيير هذا السطر:

                     inDirectory:@"html"] 

ل:

                     inDirectory:nil]

و شزام !انها عملت :)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top