ইউআইবিউবভিউতে প্রদর্শিত কোনও HTML পৃষ্ঠার শিরোনাম কীভাবে পাবেন?


145

ইউআইবিউবভিউতে প্রদর্শিত একটি HTML পৃষ্ঠা থেকে আমার শিরোনাম ট্যাগের সামগ্রীগুলি বের করতে হবে। এটি করার সবচেয়ে শক্তিশালী উপায় কী?

আমি জানি আমি করতে পারি:

- (void)webViewDidFinishLoad:(UIWebView *)webView{
    NSString *theTitle=[webView stringByEvaluatingJavaScriptFromString:@"document.title"];
}

তবে জাভাস্ক্রিপ্ট সক্ষম থাকলে তা কেবল কাজ করে।

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

আমি অনুভব করি যে আমি স্পষ্ট কিছু ভুলে গেছি। এই দুটি পছন্দের চেয়ে ভাল পদ্ধতি আছে?

হালনাগাদ:

এই প্রশ্নের উত্তর অনুসরণ করে: ইউআইবিউব ভিউ: আপনি কি জাভাস্ক্রিপ্ট অক্ষম করতে পারবেন? ইউআইবিউবভিউতে জাভাস্ক্রিপ্ট বন্ধ করার কোনও উপায় নেই বলে মনে হচ্ছে। সুতরাং উপরের জাভাস্ক্রিপ্ট পদ্ধতি সর্বদা কার্যকর হবে।


1
+1 আমাকে @ "ডকুমেন্ট.টাইটেল" পদ্ধতিতেও অবলম্বন করতে হয়েছিল।
ডেভ দেলং

আমি কেবল এটির জন্য অনুসন্ধান করেছিলাম এবং এইচটিএমএল পার্স করার ভীতিজনক দর্শন পেয়েছিলাম। খুব চতুর সমাধান।
মার্গুশোল্যান্ড

একটি অনুরূপ তাই প্রশ্ন যান আরো দেখুন নিম্নলিখিত উত্তর: stackoverflow.com/a/2313430/908621
fishinear

এই পোর্টালে অনেকগুলি লিঙ্ক রয়েছে, যেমন: স্ট্যাকওভারফ্লো / প্রশ্নগুলি
কামিল ওয়াজনিয়াক

অ্যাপল সমর্থন সম্প্রদায়েরও একই উত্তর রয়েছে
ড্যানিয়েল

উত্তর:


88

যারা উত্তরটি সন্ধান করতে কেবল নিচে স্ক্রোল করে:

- (void)webViewDidFinishLoad:(UIWebView *)webView{
    NSString *theTitle=[webView stringByEvaluatingJavaScriptFromString:@"document.title"];
}

এটি সর্বদা কাজ করবে যেহেতু ইউআইবিউবভিউতে জাভাস্ক্রিপ্ট বন্ধ করার কোনও উপায় নেই।


এটি ব্যবহার করে, যদি ওয়েবপৃষ্ঠার এনকোডিংটি 'utf-8' না হয় তবে শিরোনামটি অগোছালো হবে।
জিয়াও

সুইফট 4 কেমন?
জয়প্রকাশ দুবে

4

WKWebView 'শিরোনাম' সম্পত্তি আছে, ঠিক এটি এর মতো করুন,

func webView(_ wv: WKWebView, didFinish navigation: WKNavigation!) {
    title = wv.title
}

আমি UIWebViewএখনই উপযুক্ত বলে মনে করি না ।


3

জাভাস্ক্রিপ্ট সক্ষম থাকলে এটি ব্যবহার করুন: -

NSString *theTitle=[webViewstringByEvaluatingJavaScriptFromString:@"document.title"];

জাভাস্ক্রিপ্ট অক্ষম হলে এটি ব্যবহার করুন: -

NSString * htmlCode = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://www.appcoda.com"] encoding:NSASCIIStringEncoding error:nil];
NSString * start = @"<title>";
NSRange range1 = [htmlCode rangeOfString:start];

NSString * end = @"</title>";
NSRange range2 = [htmlCode rangeOfString:end];

NSString * subString = [htmlCode substringWithRange:NSMakeRange(range1.location + 7, range2.location - range1.location - 7)];
NSLog(@"substring is %@",subString);

আমি +7 দৈর্ঘ্য নিষ্কাশন জন্য ব্যবহৃত হয় এবং -7 NSMakeRange মধ্যে <title>অর্থাত 7


আপনি কি এখনই ইউআইভিউভিউতে জাভাস্ক্রিপ্ট অক্ষম করতে পারেন? 2010 সালে ফিরে আপনি করতে পারেন নি।
টেকজেন

আইওএস 8 এর আগে আমি আইওএস সম্পর্কে জানি না তবে আপনি এটি করতে পারেন, সেটিংসে যান -> সাফারি -> উন্নত -> জাভাস্ক্রিপ্ট চালু / বন্ধ
পাবন্দীপ সিং

জাভাস্ক্রিপ্ট কোডটিতে সক্ষম বা অক্ষম করা আছে কিনা আপনি কীভাবে জানবেন?
এডি

2

সম্পাদনা: সবেমাত্র আপনি উত্তরটি খুঁজে পেয়েছেন ... শীঘ্রই

আমি আক্ষরিকভাবে এই শিখেছি! এটি করতে, আপনার এটি ইউআইউইউভিউ ভিউতে প্রদর্শিত হওয়ার দরকার নেই। (তবে আপনি এটি ব্যবহার করার সাথে সাথে আপনি কেবল বর্তমান পৃষ্ঠার URL টি পেতে পারেন)

যাইহোক, এখানে কোড এবং কিছু (দুর্বল) ব্যাখ্যা:

    //create a URL which for the site you want to get the info from.. just replace google with whatever you want
    NSURL *currentURL = [NSURL URLWithString:@"http://www.google.com"];
    //for any exceptions/errors
    NSError *error;
    //converts the url html to a string
    NSString *htmlCode = [NSString stringWithContentsOfURL:currentURL encoding:NSASCIIStringEncoding error:&error];

সুতরাং আমাদের এইচটিএমএল কোড রয়েছে, এখন আমরা কীভাবে শিরোনাম পাব? ঠিক আছে, প্রতিটি এইচটিএমএল-ভিত্তিক ডকটিতে শিরোনামটি ইজ দ্য শিরোনাম দ্বারা সংকেত দেওয়া হয় তাই সম্ভবত সবচেয়ে সহজ কাজটি হ'ল এইচটিএমএল কোডের স্ট্রিংটির জন্য অনুসন্ধান করা, এবং এর জন্য এবং এটি স্ট্ররিং করা যাতে আমরা জিনিসগুলি মাঝখানে পাই get

    //so let's create two strings that are our starting and ending signs
    NSString *startPoint = @"<title>";
    NSString *endPoint = @"</title>";
    //now in substringing in obj-c they're mostly based off of ranges, so we need to make some ranges
    NSRange startRange = [htmlCode rangeOfString:startPoint];
    NSRange endRange = [htmlCode rangeOfString:endPoint];
    //so what this is doing is it is finding the location in the html code and turning it
    //into two ints: the location and the length of the string
    //once we have this, we can do the substringing!
    //so just for easiness, let's make another string to have the title in
    NSString *docTitle = [htmlString substringWithRange:NSMakeRange(startRange.location + startRange.length, endRange.location)];
    NSLog(@"%@", docTitle);
    //just to print it out and see it's right

এবং সত্যিই এটি! সুতরাং মূলত ডকটিটলে চলছে সমস্ত শেনানিগানদের ব্যাখ্যা করার জন্য, আমরা যদি কেবল এনএসমেকরেঞ্জ (startRange.location, endRange.location) বলে একটি পরিসর তৈরি করি তবে আমরা শিরোনাম এবং স্টার্টস্ট্রিংয়ের পাঠ্যটি পেয়ে যাব (কারণ এটি) অবস্থানটি দ্বারা স্ট্রিংয়ের প্রথম অক্ষর। যাতে অফসেট করার জন্য, আমরা কেবল স্ট্রিংয়ের দৈর্ঘ্য যুক্ত করেছি

এখন মনে রাখবেন এই কোডটি পরীক্ষা করা হয়নি .. যদি কোনও সমস্যা হয় তবে এটি একটি বানান ত্রুটি হতে পারে, বা যখন আমি না হওয়ার কথা ছিলাম তখন আমি কোনও পয়েন্টার যুক্ত / করি নি।

শিরোনামটি যদি কিছুটা অদ্ভুত এবং পুরোপুরি সঠিক না হয় তবে এনএসমেকেরেঞ্জের সাথে জগাখিচির চেষ্টা করুন Iআমার মানে স্ট্রিংয়ের বিভিন্ন দৈর্ঘ্য / অবস্থানগুলি যুক্ত / বিয়োগের মতো --- যেটি যৌক্তিক বলে মনে হয়।

আপনার যদি কোনও প্রশ্ন থাকে বা কোনও সমস্যা থাকে তবে নির্দ্বিধায় জিজ্ঞাসা করুন। এই ওয়েবসাইটে আমার এই প্রথম উত্তর তাই দুঃখিত যদি এটি কিছুটা বিশৃঙ্খলাবদ্ধ হয়


1

এখানে সুইফট 4 সংস্করণ, এ উত্তর ভিত্তিতে এখানে

func webViewDidFinishLoad(_ webView: UIWebView) {
    let theTitle = webView.stringByEvaluatingJavaScript(from: "document.title")
}

0

আমি এখনও পর্যন্ত ওয়েবভিউগুলির সাথে অভিজ্ঞতা অর্জন করতে পারি না তবে, আমি বিশ্বাস করি এটি পৃষ্ঠা শিরোনামে এটির শিরোনাম সেট করে, সুতরাং, আমি যে কৌশলটি প্রস্তাব করি তা হ'ল ওয়েবভিউতে একটি বিভাগ ব্যবহার করা এবং সেল্ট.টাইটেলের জন্য সেটারটি ওভাররাইট করা যাতে আপনি এতে কোনও বার্তা যুক্ত করেন আপনার একজন শিরোনাম পেতে কিছু সম্পত্তি আপত্তি বা সংশোধন করুন।

আপনি চেষ্টা করে বলতে পারেন এবং এটি কাজ করে কিনা?


0

আপনার কোডে যদি আপনার এটির ঘন ঘন প্রয়োজন হয় তবে আমি আপনাকে "এক্সটেনশন ইউআইওউবভিউ" এর মতো একটি ফানক যুক্ত করার পরামর্শ দিই

extension UIWebView {

func title() -> String{
    let title: String = self.stringByEvaluatingJavaScript(from: "document.title")!
    return title
}

বিকল্পভাবে WKWebView ব্যবহার করা আরও ভাল।

দুর্ভাগ্যক্রমে, এটি আরকিট-তে ভাল সমর্থন করে না। আমাকে WKWebView এ ছেড়ে দিতে হয়েছিল। আমি ওয়েবসাইটটি ওয়েব ভিউতে লোড করতে পারিনি। কারও কাছে যদি এখানে এই সমস্যার সমাধান হয় -> আমার একটি সিমলার সমস্যা রয়েছে তবে এটি ব্যাপকভাবে সহায়তা করবে।

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