ইউইউইভিউতে স্থানীয় এইচটিএমএল ব্যবহার করে আপেক্ষিক পথ থেকে সংস্থানগুলি লোড করুন


121

আমার খুব সাধারণ আইওএস অ্যাপ্লিকেশন রয়েছে, যেখানে একটি ইউইউউভিউ ভিউ একটি খুব সাধারণ পরীক্ষার পৃষ্ঠা (টেস্ট html) লোড করে:

<html>
<body>
<img src="img/myimage.png" />
</body>
</html>

আমি আমার ওয়েব ভিউতে এই পরীক্ষার html ফাইলটি লোড করছি:

NSURL *url = [[NSBundle mainBundle] URLForResource:@"test" withExtension:@"html"];
NSString *html = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];
NSURL *baseUrl = [NSURL fileURLWithPath:[[NSBundle mainBundle] bundlePath]];
[webView loadHTMLString:html baseURL:baseUrl];

আমি যদি আপেক্ষিক পাথ ছাড়াই চিত্রটিকে রেফারেন্স করি এবং রেফারেন্সড ইমেজটি টার্গেটস -> এক্সকোডের মধ্যে বান্ডেল রিসোর্সগুলি অনুলিপি করে রাখি তবে আমার HTML ফাইলটিতে যেমন আপেক্ষিক পথে কাজ করা যায় না তেমন এটি কাজ করে fine । এটি করার একটি উপায় অবশ্যই আছে, আমার কাছে প্রচুর চিত্র, সিএসএস, জাভাস্ক্রিপ্ট ফাইল রয়েছে যা আমি ওয়েব ভিউতে লোড করতে চাই এবং আমার চাই যে সমস্ত কিছুই মূলের মধ্যে না থাকা এবং আমার ওয়েবের সমস্ত উল্লেখগুলি পরিবর্তন করতে হবে অ্যাপ্লিকেশান।

উত্তর:


286

এইভাবে আপেক্ষিক রেফারেন্স সহ কোনও স্থানীয় এইচটিএমএল লোড / ব্যবহার করতে হবে।

  1. আপনার এক্সকোড প্রকল্পে রিসোর্সটি টেনে আনুন (আমি আমার ফাইন্ডার উইন্ডো থেকে www নামে একটি ফোল্ডার টেনে নিয়েছি), আপনি দুটি বিকল্প পাবেন "যে কোনও যুক্ত ফোল্ডারের জন্য গ্রুপ তৈরি করুন" এবং "কোনও যুক্ত ফোল্ডারের জন্য ফোল্ডারগুলি রেফারেন্স তৈরি করুন"।
  2. "ফোল্ডার রেফারেন্স তৈরি করুন .." বিকল্পটি নির্বাচন করুন।
  3. নীচে প্রদত্ত কোডটি ব্যবহার করুন। এটি একটি কবজ মত কাজ করা উচিত।

    NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"index" ofType:@"html" inDirectory:@"www"]];
    [webview loadRequest:[NSURLRequest requestWithURL:url]];

এখন এইচটিএমএলে আপনার সমস্ত আপেক্ষিক লিঙ্কগুলি (যেমন img / .gif, js / .js) সমাধান করা উচিত।

সুইফট 3

    if let path = Bundle.main.path(forResource: "dados", ofType: "html", inDirectory: "root") {
        webView.load( URLRequest(url: URL(fileURLWithPath: path)) )
    }

1
সুপার ও আপ ভোট দিয়েছে! "যে কোনও যুক্ত ফোল্ডারের জন্য গ্রুপ তৈরি করা" এর বিপরীতে ফোল্ডার রেফারেন্স তৈরি করুন কেন কেউ ব্যাখ্যা করতে পারেন?
শন

3
: একটি sidenote, যদি আপনি যেমন ইমেজ উল্টোদিকে জাভাস্ক্রিপ্ট ফাইল লোড করার চেষ্টা করছেন, আপনি ভাল হিসাবে এই তাকান করতে হবে stackoverflow.com/a/3629479/385619
Willster

2
ডিরেক্টরি যদি এন ফোল্ডার গভীর হয়? @"www/app"ডিরেক্টরি আরগের মতো স্ট্রিংটি পাস করা কি ঠিক ?
রে

1
যদি আমরা ডকুমেন্টস থেকে এইচটিএমএল লোড করি, বান্ডেল থেকে নয়?
chipbk10

ডিফল্টরূপে শিয়ান এক্সকোড মূল ফোল্ডারে যুক্ত সমস্ত ফাইল সঞ্চয় করে, গোষ্ঠীগুলি কেবলমাত্র আপনার প্রকল্পের গাছটিকে সুন্দর দেখায়। ফোল্ডার রেফারেন্সগুলি প্রকৃতপক্ষে ডিরেক্টরি কাঠামো সংরক্ষণ করে সামগ্রীগুলি অনুলিপি করে। এটি আপনি যদি আপনার অফিসের মেশিনে যেমনভাবে করতে চান তেমনভাবে আপনার ডিভাইসে কাজ করতে চান তবে এটি বেশ প্রয়োজনীয়।
Combuster

24

সুইফটে:

 func pathForResource(  name: String?, 
                        ofType ext: String?, 
                        inDirectory subpath: String?) -> String?  {

  // **name:** Name of Hmtl
  // **ofType ext:** extension for type of file. In this case "html"
  // **inDirectory subpath:** the folder where are the file. 
  //    In this case the file is in root folder

    let path = NSBundle.mainBundle().pathForResource(             "dados",
                                                     ofType:      "html", 
                                                     inDirectory: "root")
    var requestURL = NSURL(string:path!)
    var request = NSURLRequest(URL:requestURL)

    webView.loadRequest(request)
}

সুইফট কোডের জন্য ধন্যবাদ। স্বীকৃত উত্তর সহ ভাল কাজ করেছেন
বালা বিষ্ণু

স্বাগত! :।) @ বালা বিষ্ণু
ওয়েলস

দুর্দান্ত কাজ করে, requestURLযদিও আমাকে আনপ্রেট করতে হয়েছিল ।
Rত্বিক

5

আমি সবকিছুকে এক লাইনে ছড়িয়ে দিয়েছি (খারাপ আমি জানি) এবং এতে কোনও ঝামেলা নেই:

[webView loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"test" 
                                                                                                         ofType:@"html"]
                                                             isDirectory:NO]]];         

1
টার্গেট নোডের অধীনে আপনার চিত্রের এক্সকোড প্রকল্পে আপনি কি "প্রকল্পের সাথে সম্পর্কিত" বা "এনক্লোজিং গ্রুপের সাথে সম্পর্কিত" ব্যবহার করেন? আমি প্রজেক্টে আপেক্ষিক ব্যবহার করছিলাম কারণ তথ্য সম্পর্কিত কথোপকথনে যখন আমি প্রাসঙ্গিকের সাথে সম্পর্কিত নির্বাচন করি তখন এটি যে পথটি দেখায় তা সঠিক দেখায়। যাইহোক আমি যখন এনকোলেসিং গ্রুপের তুলনায় নির্বাচন করি তখন চিত্রটি সঠিকভাবে লোড হয় বলে মনে হয়। এখন আমি জাভাস্ক্রিপ্ট এবং সিএসএস এবং সমস্ত দিয়ে সঠিকভাবে কাজ করতে আমার সম্পূর্ণ পৃষ্ঠাটি পেতে চলেছি, ধন্যবাদ!
ম্যাট পামারলে

ইসস! এই ইউইউভিউভিউটি এত ভঙ্গুর, আমি আস্তে আস্তে আমার পরীক্ষার পৃষ্ঠায় আরও জটিল পরীক্ষা যুক্ত করা শুরু করলাম (উদাহরণস্বরূপ, আইএমজি ট্যাগে ইনলাইন পরিবর্তে সিএসএস দিয়ে চিত্রটি সেট করা) এবং এটি কাজ করছিল না তাই আমি যা করেছি তা মূলত আমার কাছে ফিরে গিয়েছিল এবং এটি না করে আবার কাজ হবে না! আমি আমার ইউইউবিউভিউতে কিছু ধরণের ক্যাশে নিয়ে কাজ করছি?
ম্যাট পামারলে

5

আমি কেবল এটি করি:

    UIWebView *webView = [[[UIWebView alloc] init] autorelease];

    NSURL *url = [[NSBundle mainBundle] URLForResource:@"index" withExtension:@"html"];
    NSURLRequest* request = [NSURLRequest requestWithURL:url];
    [webView loadRequest:request];

যেখানে "index.html" তুলনামূলকভাবে চিত্রগুলি, সিএসএস, জাভাস্ক্রিপ্ট ইত্যাদি উল্লেখ করে


2

দ্রুত উত্তর 2।

UIWebView ক্লাস রেফারেন্স webView.loadRequest (অনুরোধ) ব্যবহারের বিরুদ্ধে উপদেশ দেয়:

স্থানীয় এইচটিএমএল ফাইলগুলি লোড করতে এই পদ্ধতিটি ব্যবহার করবেন না; পরিবর্তে, লোড এইচটিএমএল স্ট্রিং: বেস ইউআরএল: ব্যবহার করুন।

এই সমাধানে, এইচটিএমএল একটি স্ট্রিংয়ে পড়ে। এইচটিএমএল এর ইউআরএল পথটি কাজ করার জন্য ব্যবহৃত হয় এবং এটি একটি বেস url হিসাবে পাস করে as

let url = bundle.URLForResource("index", withExtension: "html", subdirectory: "htmlFileFolder")
let html = try String(contentsOfURL: url)
let base = url.URLByDeletingLastPathComponent
webView.loadHTMLString(html, baseURL: base)

যদি এটি হয় তবে ম্যানুয়ালটিতে এটি কোথায় পরামর্শ দেয় সে বিষয়ে উল্লেখ করা ভাল এবং সেই পৃষ্ঠাটি থেকে একটি অংশটি সন্নিবেশ করানো ভাল - এই মুহুর্তে প্রসঙ্গ ছাড়াই এটি খুব বেশি মনে হয়।
বেন কক্স

অ্যাপলের মন্তব্য loadRequest জন্য উদাহরণস্বরূপ পদ্ধতি পৃষ্ঠাতে হল:
জেফ

0

আমি ফিরে গিয়ে পরীক্ষা করেছি এবং এটি পুনরায় পরীক্ষা করেছি, এটি প্রদর্শিত হচ্ছে যে আমি কেবল এটি কাজ করতে পারি (যেহেতু img ফোল্ডারে কিছু ফাইল আছে এবং কিছু জেএস / সিএসএস ইত্যাদিতে আছে ...) তা নয় to এইচটিএমএলতে আমার চিত্রের জন্য একটি আপেক্ষিক পথ ব্যবহার করুন এবং বান্ডিল ফোল্ডারে রেফারেন্স সহ সমস্ত কিছু করুন। কি লজ্জা :(.

<img src="myimage.png" />

0

সুইফট 3 এ @ এসডাব্রাইনের উত্তর:

    let url = URL.init(fileURLWithPath: Bundle.main.path(forResource: "index", ofType: "html", inDirectory: "www")!)
    webView.loadRequest(NSURLRequest.init(url: url) as URLRequest)

-1

WKWebView ব্যবহার করে সুইফট 3.01 এ:

let localURL = URL.init(fileURLWithPath: Bundle.main.path(forResource: "index", ofType: "html", inDirectory: "CWP")!)
myWebView.load(NSURLRequest.init(url: localURL) as URLRequest)

এটি 3.01 এর কিছু সূক্ষ্ম বাক্য গঠন পরিবর্তনের জন্য সামঞ্জস্য করে এবং ডিরেক্টরি কাঠামোটিকে ঠিক জায়গায় রাখে যাতে আপনি সম্পর্কিত HTML ফাইল এম্বেড করতে পারেন।


এনএস উপসর্গটি কি 3.x থেকে মূল ভিত্তির ধরণের জন্য বাদ দেওয়া হয়নি? এটা আমার জন্য কৌতুক করেছিল, ধন্যবাদ! let localURL = URL.init(fileURLWithPath: Bundle.main.path(forResource: "index", ofType: "html", inDirectory: "mapa_procesos")!) webView.loadRequest(URLRequest(url: localURL))
এডুয়ার্ডো গোমেজ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.