কীভাবে স্থানীয় এইচটিএমএল ফাইলটি ইউআইউইভভিউতে লোড করবেন


165

আমি আমার ইউআইবিউব ভিউতে এইচটিএমএল ফাইল লোড করার চেষ্টা করছি তবে এটি কার্যকর হবে না। মঞ্চটি এখানে: আমার প্রকল্পে আমার html_files নামে একটি ফোল্ডার রয়েছে। তারপরে আমি ইন্টারফেস বিল্ডারে একটি ওয়েবভিউ তৈরি করেছি এবং ভিউকন্ট্রোলারে এটিতে একটি আউটলেট নির্ধারণ করেছি। এইচটিএমএল ফাইল সংযুক্ত করতে আমি এই কোডটি ব্যবহার করছি:

-(void)viewDidLoad
{
    NSString *htmlFile = [[NSBundle mainBundle] pathForResource:@"sample" ofType:@"html" inDirectory:@"html_files"];
    NSData *htmlData = [NSData dataWithContentsOfFile:htmlFile];
    [webView loadData:htmlData MIMEType:@"text/html" textEncodingName:@"UTF-8" baseURL:[NSURL URLWithString:@""]];
    [super viewDidLoad];
}

এটি কাজ করবে না এবং ইউআইবিউবভিউ ফাঁকা। আমি কিছু সাহায্য কৃতজ্ঞ।

উত্তর:


272

সম্ভবত এনএসএসস্ট্রিং এবং এইচটিএমএল ডকুমেন্টটি নিম্নরূপে ব্যবহার করা ভাল:

উদ্দেশ্য গ

NSString *htmlFile = [[NSBundle mainBundle] pathForResource:@"sample" ofType:@"html"];
NSString* htmlString = [NSString stringWithContentsOfFile:htmlFile encoding:NSUTF8StringEncoding error:nil];
[webView loadHTMLString:htmlString baseURL: [[NSBundle mainBundle] bundleURL]];

দ্রুতগতি

let htmlFile = NSBundle.mainBundle().pathForResource("fileName", ofType: "html")
let html = try? String(contentsOfFile: htmlFile!, encoding: NSUTF8StringEncoding)
webView.loadHTMLString(html!, baseURL: nil) 

সুইফট 3 এর কয়েকটি পরিবর্তন রয়েছে:

let htmlFile = Bundle.main.path(forResource: "intro", ofType: "html")
let html = try? String(contentsOfFile: htmlFile!, encoding: String.Encoding.utf8)
webView.loadHTMLString(html!, baseURL: nil)

তুমি কি চেষ্টা করেছিলে?

এছাড়াও pathForResource:ofType:inDirectoryকল করে রিসোর্সটি পাওয়া গেছে কিনা তা পরীক্ষা করে দেখুন ।


এটি কাজ করে না, আমি এনএসএলগ করেছি (@ "% @", এইচটিএমএল ফাইল); শুধু পরীক্ষা করতে এবং এটি নাল বলে।
ম্যাডকোডার্জ

সুতরাং এর অর্থ সংস্থান খুঁজে পাওয়া যায় নি। ঠিক সঙ্গে পরীক্ষা করুন: এনএসএসটিরিং * এইচটিএমএল ফাইল = [[এনএসবান্ডেল মেইনবান্ডেল] পাথের জন্য উত্স: @ "নমুনা" টাইপ: @ "এইচটিএমএল"]; ইনডাইরেক্টরি ছাড়াই
user478681

ইনডাইরেক্টরি ছাড়াই আমি পেয়েছি: আইফোন সিমুলেটর / ৪.৩.২ / অ্যাপ্লিকেশনস / 49351078-9423-4A24-8E58-B2A059961097 / ওয়েবভিউ টেস্ট.এপ / নমুনা এইচটিএমএল তবে এটি এখনও খালি ছিল স্ক্রিনে এইচটিএমএল প্রদর্শিত হয়নি। আমি কি অন্য কিছু মিস করছি? নমুনা প্রকল্পটি এখানে: http://www.box.net/shared/rb05b4ppjnbof1r33gh7
ম্যাডকোডেরজ

3
আপনার কেবলমাত্র আপনার
ওয়েবভিউয়ের

3
এই উত্তরে প্রচুর ভোট রয়েছে তবে মনে হয় এটি পুরানো। স্থানীয় চিত্র এবং সিএসএস সম্পদগুলি এই পদ্ধতির সাহায্যে লোড হবে না। পরিবর্তে এই উত্তর দেখুন ।
পৌলমনিকো

90

সম্পাদনা 2016-05-27 - loadRequest"একটি সর্বজনীন ক্রস-সাইট স্ক্রিপ্টিং দুর্বলতা প্রকাশ করে।" আপনি যে লোড করেছেন এমন একক সম্পদ আপনার মালিকানাধীন রয়েছে তা নিশ্চিত করুন। আপনি যদি কোনও খারাপ স্ক্রিপ্ট লোড করেন তবে এটি যা চায় তা লোড করতে পারে।

স্থানীয়ভাবে কাজ করার জন্য যদি আপনার সম্পর্কিত লিঙ্কগুলির প্রয়োজন হয় তবে এটি ব্যবহার করুন:

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

বান্ডেলটি প্রকল্পের সমস্ত উপ-ডিরেক্টরিগুলি সন্ধান করবে my.html। (নির্মাণের সময় ডিরেক্টরি কাঠামো সমতল হয়)

যদি my.htmlট্যাগ থাকে <img src="some.png">তবে ওয়েবভিউটি some.pngআপনার প্রকল্প থেকে লোড হবে ।


4
আমি এই পৃষ্ঠায় স্বীকৃত উত্তরটি কাজ করতে পারিনি - তবে এই পদ্ধতির কাজটি প্রথমবার হয়েছিল। আমি মনে করি আসল উত্তর থেকে আইওএস এগিয়ে চলেছে। ধন্যবাদ।
জেমস

এই উত্তরের জন্য ধন্যবাদ। এই বনাম সম্পর্কে কী আলাদা। গৃহীত উত্তরগুলি এইচটিএমএল ডক কাজের লিঙ্ক।
অ্যামি

2
অ্যাপলের মতে সুরক্ষা আক্রমণে ঝুঁকির হাত থেকে বাঁচতে আপনাকে সহায়তার জন্য লোড এইচটিএমএল স্ট্রিং: বেস ইউআরএল: স্থানীয় এইচটিএমএল ফাইলগুলি লোড করতে নিশ্চিত হন; লোডরেকুয়েস্ট ব্যবহার করবেন না:।
ED-209

গৃহীত উত্তর আমার পক্ষে কাজ করছে না। ধন্যবাদ @ নেয়েল এয়ার্ড এই উত্তরটি আমার পক্ষে কাজ করছে।
মিহির ওজা

এটি কেবলমাত্র আমার জন্য কাজ করে যদি এইচটিএমএল ফাইলটি কোনও ফোল্ডারের ভিতরে না থাকে
রেনান ফ্রাঙ্কা

40

এর মাধ্যমে আপনি এইচটিএমএল ফাইলটি আপনার প্রকল্পের সম্পদগুলিতে (বান্ডেল) ওয়েবউউতে লোড করতে পারেন।

 UIWebView *web = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 460)];
    [web loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] 
                                pathForResource:@"test" ofType:@"html"]isDirectory:NO]]];

এটি আপনার জন্য দরকারী হতে পারে।


এটিই আমি একমাত্র পার্থক্য করছি তা হ'ল আপনি প্রোগ্রামটিমে ওয়েবভিউ তৈরি করছেন। তবে যাইহোক ধন্যবাদ
ম্যাডকোডার্জ

আপনি এনএসএলগ দ্বারা এইচটিএমএল ফাইল চেকের পথ পান।
এজেপ্যাটেল

এইচটিএমএল ফাইলের টার্গেট সদস্যতা যাচাই করা উচিত অন্যথায় নিম্নলিখিত ব্যতিক্রম ছুঁড়ে ফেলা হবে: -বিহীন ব্যতিক্রম 'এনএসআইএনওটিএলজিমেন্টএক্সেপশন' এর কারণে অ্যাপ্লিকেশনটির পরীক্ষা করা, কারণ: '*** - [এনএসআরএলআইফিলিওআরএলপথের সাথে: পথনির্দেশ:]: নীল স্ট্রিং প্যারামিটার'
দুরাই আমুথান। এইচ

9

আমি অনুমান করি যে আপনার প্রয়োজন allocateএবং আপনার webviewপ্রথমটি শুরু করুন ::

- (void)viewDidLoad
{
    NSString *htmlFile = [[NSBundle mainBundle] pathForResource:@"sample" ofType:@"html" inDirectory:@"html_files"];
    NSData *htmlData = [NSData dataWithContentsOfFile:htmlFile];
    webView = [[UIWebView alloc] init];
    [webView loadData:htmlData MIMEType:@"text/html" textEncodingName:@"UTF-8" baseURL:[NSURL URLWithString:@""]];

    [super viewDidLoad];
}

8

একটি সাধারণ কপি-পেস্ট কোড স্নিপেট:

-(void)LoadLocalHtmlFile:(NSString *)fileName onWebVu:(UIWebView*)webVu
{
    [webVu loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle]pathForResource:fileName ofType:@"html"]isDirectory:NO]]];
}

বিঃদ্রঃ:

নিশ্চিত করুন যে এইচটিএমএল ফাইলের টার্গেট সদস্যতা চেক করা হয়েছে অন্যথায় নিম্নলিখিত ব্যতিক্রম ছুঁড়ে ফেলা হবে: -

এখানে চিত্র বর্ণনা লিখুন

অপ্রয়োজনীয় ব্যতিক্রমের কারণে অ্যাপ্লিকেশনটি সমাপ্ত করা হচ্ছে

'NSInvalidArgumentException', reason: '*** -[NSURL initFileURLWithPath:isDirectory:]: nil string parameter'


6

সুইফট 3 এবং সুইফট 4 এর জন্য:

let htmlFile = Bundle.main.path(forResource: "name_resource", ofType: "html")
let html = try! String(contentsOfFile: htmlFile!, encoding: String.Encoding.utf8)
self.webView.loadHTMLString(html, baseURL: nil)

এটি লিঙ্কযুক্ত ফাইলগুলি লোড করবে না যেমন <img src = "..." />
পিয়ার এফ

5
UIWebView *web=[[UIWebView alloc]initWithFrame:self.view.frame];
    //[self.view addSubview:web];
    NSString *filePath=[[NSBundle mainBundle]pathForResource:@"browser_demo" ofType:@"html" inDirectory:nil];
    [web loadRequest:[NSURLRequest requestWhttp://stackoverflow.com/review/first-postsithURL:[NSURL fileURLWithPath:filePath]]];

4

আপনার HTML ফাইলটি ইউটিএফ -8 এনকোডিং সমর্থন করে না, কারণ একই কোডটি আমার পক্ষে কাজ করছে।

অথবা আপনি কোডের এই লাইনটিও করতে পারেন:

NSString *htmlFile = [[NSBundle mainBundle] pathForResource:@"Notes For Apple" ofType:@"htm" inDirectory:nil];
NSString* htmlString = [NSString stringWithContentsOfFile:htmlFile encoding:NSUTF8StringEncoding error:nil];
[WebView loadHTMLString:htmlString baseURL:nil];

4

এখানে জ্যাকুরির সাথে এইচটিএমএল ফাইলের কাজ করার উপায়।

 _webview=[[UIWebView alloc]initWithFrame:CGRectMake(0, 0, 320, 568)];
    [self.view addSubview:_webview];

    NSString *filePath=[[NSBundle mainBundle]pathForResource:@"jquery" ofType:@"html" inDirectory:nil];

    NSLog(@"%@",filePath);
    NSString *htmlstring=[NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil];

    [_webview loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:filePath]]];
                         or
    [_webview loadHTMLString:htmlstring baseURL:nil];

আপনি আপনার ইউআইউবভিউতে এইচটিএমএল ফাইলটি কল করতে অনুরোধগুলি ব্যবহার করতে পারেন


3

নিশ্চিত করুন যে "এইচটিএমএল_ফায়ালস" আপনার অ্যাপ্লিকেশনের প্রধান বান্ডিলের একটি ডিরেক্টরি, এবং কেবল এক্সকোডের একটি গ্রুপ নয়।


3

দ্রুত ব্যবহার করে এটি করার একটি নতুন উপায় way ইউআইউইউবভিউ আর নেই এবং ওয়েব পৃষ্ঠাগুলি লোড করার জন্য ডব্লিউকেউইউব ভিউ হ'ল নতুন শ্রেণি যা ওয়েব ভিউতে সাফারি বৈশিষ্ট্যগুলি নিশ্চিত করে।

    import WebKit

    let preferences = WKPreferences()
    preferences.javaScriptCanOpenWindowsAutomatically = false

    let configuration = WKWebViewConfiguration()
    configuration.preferences = preferences

    let webView = WKWebView(frame: self.view.bounds, configuration: configuration)
    let request = NSURLRequest(URL: NSURL(string: "http://nshipster.com"))
    webView.loadRequest(request)

3
Swift iOS:

 // get server url from the plist directory
        var htmlFile = NSBundle.mainBundle().pathForResource("animation_bg", ofType: "html")!
        var htmlString = NSString(contentsOfFile: htmlFile, encoding: NSUTF8StringEncoding, error: nil)
        self.webView.loadHTMLString(htmlString, baseURL: nil)

3
[[NSBundle mainBundle] pathForResource:@"marqueeMusic" ofType:@"html"];

এটি দেরিতে হতে পারে তবে ফাইলটি pathForResourceহ'ল nilএটিতে যুক্ত করা উচিত Build Phases > Copy Bundle Resources

এখানে চিত্র বর্ণনা লিখুন


2

এখানে সুইফট 3:

    if let htmlFile = Bundle.main.path(forResource: "aa", ofType: "html"){
        do{
            let htmlString = try NSString(contentsOfFile: htmlFile, encoding:String.Encoding.utf8.rawValue )
            messageWebView.loadHTMLString(htmlString as String, baseURL: nil)
        }
        catch _ {
        }
    }

1
if let htmlFile = NSBundle.mainBundle().pathForResource("aa", ofType: "html"){
    do{
        let htmlString = try NSString(contentsOfFile: htmlFile, encoding:NSUTF8StringEncoding )
        webView.loadHTMLString(htmlString as String, baseURL: nil)
    }
    catch _ {
    }
}

0

সুইফট ২.০-তে, @ ব্যবহারকারীর 78786868৮১ এর উত্তরটি দেখতে এই রকম হতে পারে:

    let HTMLDocumentPath = NSBundle.mainBundle().pathForResource("index", ofType: "html")
    let HTMLString: NSString?

    do {
        HTMLString = try NSString(contentsOfFile: HTMLDocumentPath!, encoding: NSUTF8StringEncoding)
    } catch {
        HTMLString = nil
    }

    myWebView.loadHTMLString(HTMLString as! String, baseURL: nil)

পথে / কোনও ফাইলের মধ্যে ত্রুটির বিরুদ্ধে পরীক্ষা করার জন্য ব্যবহার করা আরও ভাল:
ingconti

0

সমস্ত ফাইল (এইচটিএমএল এবং সংস্থানসমূহ) একটি ডিরেক্টরিতে রাখুন (আমার "ম্যানুয়াল" এর জন্য)। এরপরে, "সহায়তাকারী ফাইলগুলি" এর উপরে ডিরেক্টরিটি XCode এ টেনে আনুন drop আপনার "প্রয়োজনে আইটেমগুলি অনুলিপি করুন" এবং "ফোল্ডার রেফারেন্স তৈরি করুন" বিকল্পগুলি পরীক্ষা করা উচিত। এর পরে, একটি সাধারণ কোড লিখুন:

NSURL *url = [[NSBundle mainBundle] URLForResource:@"manual/index" withExtension:@"html"];
[myWebView loadRequest:[NSURLRequest requestWithURL:url]];

মনোযোগ দিন @"manual/index", ম্যানুয়াল আমার ডিরেক্টরি নাম !! সবই !!!! আমার অদক্ষ ইংরেজির জন্য আমি দুঃখিত...

================================================== =====================

হোলা দেদে কোস্টা রিকা। পঙ্গা লস আর্কিভোস (এইচটিএমএল ওয়াই ডেমরিস রিকার্সস) এন আন ডিরেক্টরও (এন মাই ক্যাসো লো লামে ম্যানুয়াল), লুয়েগো, আরস্ট্রে ওয়াই স্যেল্ট এন এক্সকোড, সোবার "সাপোর্টিং ফাইলস"। "যদি প্রয়োজন হয় তবে আইটেমগুলি অনুলিপি করুন" y "ফোল্ডার রেফারেন্স তৈরি করুন" নির্বাচন করুন las

NSURL *url = [[NSBundle mainBundle] URLForResource:@"manual/index" withExtension:@"html"];
[myWebView loadRequest:[NSURLRequest requestWithURL:url]];

Presta Atención এ @"manual/index", ম্যানুয়াল এস ই এল নাম্বার ডি মাই ডিরেক্টর !!


0

যখন আপনার প্রকল্পটি বড় হয়, আপনার কিছু কাঠামোর প্রয়োজন হতে পারে, যাতে আপনার এইচটিএমএল পৃষ্ঠা সাবফোল্ডারে থাকা ফাইলগুলি রেফারেন্স করতে পারে।

ধরে নিই যে আপনি আপনার html_filesফোল্ডারটি এক্সকোডে টেনে নিয়েছেন এবং ফোল্ডার রেফারেন্স তৈরি করুন বিকল্পটি নির্বাচন করুন , নীচের সুইফট কোডটি নিশ্চিত করে যে WKWebViewফলাফলগুলি ফোল্ডার কাঠামোটিকেও সমর্থন করে:

import WebKit

@IBOutlet weak var webView: WKWebView!

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

এর অর্থ হল আপনার যদি sample.htmlফাইলটি একটি রয়েছে <img src="subfolder/myimage.jpg">ট্যাগ, তারপর ইমেজ ফাইল myimage.jpgমধ্যে subfolderএছাড়াও লোড এবং প্রদর্শন করা হবে।

ক্রেডিট: https://stackoverflow.com/a/8436281/4769344

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.