একটি ওয়েব পৃষ্ঠায় কাঁচা এইচটিএমএল বিষয়বস্তু পড়া কি সম্ভব UIWebView
?
যদি তা না হয় তবে আইফোন এসডিকে (যেমন। নেট এর সমতুল্য WebClient::openRead
) কোনও ওয়েব পৃষ্ঠা থেকে কাঁচা এইচটিএমএল বিষয়বস্তু টানানোর আর কোনও উপায় আছে ?
একটি ওয়েব পৃষ্ঠায় কাঁচা এইচটিএমএল বিষয়বস্তু পড়া কি সম্ভব UIWebView
?
যদি তা না হয় তবে আইফোন এসডিকে (যেমন। নেট এর সমতুল্য WebClient::openRead
) কোনও ওয়েব পৃষ্ঠা থেকে কাঁচা এইচটিএমএল বিষয়বস্তু টানানোর আর কোনও উপায় আছে ?
উত্তর:
দ্বিতীয় প্রশ্নের উত্তর দেওয়া সহজতর। stringWithContentsOfURL:encoding:error:
এনএসএসটিংয়ের পদ্ধতিটি দেখুন - এটি আপনাকে এনএসআরএল (যা সহজেই এনএসএসটিং থেকে সহজেই ইনস্ট্যান্ট করা যায়) হিসাবে একটি ইউআরএল পাস করতে দেয় এবং সেই URL এর পৃষ্ঠার সম্পূর্ণ সামগ্রীর সাথে একটি স্ট্রিং দেয়। উদাহরণ স্বরূপ:
NSString *googleString = @"http://www.google.com";
NSURL *googleURL = [NSURL URLWithString:googleString];
NSError *error;
NSString *googlePage = [NSString stringWithContentsOfURL:googleURL
encoding:NSASCIIStringEncoding
error:&error];
এই কোডটি চালানোর পরে, googlePage
www.google.com- এর জন্য এইচটিএমএল error
থাকবে এবং এতে আনতে কোনও ত্রুটি থাকবে। ( error
আনার পরে আপনার সামগ্রীগুলি পরীক্ষা করা উচিত ))
অন্য পথে যেতে (কোনও ইউআইবিউবভিউ থেকে) কিছুটা কৌশলযুক্ত তবে মূলত একই ধারণা। আপনাকে ভিউ থেকে অনুরোধটি টানতে হবে , তারপরে আগের মতো আনতে হবে:
NSURL *requestURL = [[yourWebView request] URL];
NSError *error;
NSString *page = [NSString stringWithContentsOfURL:requestURL
encoding:NSASCIIStringEncoding
error:&error];
সম্পাদনা: এই দুটি পদ্ধতিই একটি পারফরম্যান্স হিট নেয়, যদিও তারা অনুরোধটি দুবার করে। আপনি বর্তমানে-লোড করা UIWebView এর stringByEvaluatingJavascriptFromString:
পদ্ধতিটি ব্যবহার করে সামগ্রীটি ধরে নিয়ে এগুলি পেতে পারেন :
NSString *html = [yourWebView stringByEvaluatingJavaScriptFromString:
@"document.body.innerHTML"];
এটি ডকুমেন্ট অবজেক্ট মডেল ব্যবহার করে ভিউটির বর্তমান এইচটিএমএল সামগ্রীগুলি দখল করবে, জাভাস্ক্রিপ্টটিকে বিশ্লেষণ করবে, তারপরে এটি আপনাকে এইচটিএমএল এর এনএসএসআরটিং * হিসাবে দেবে।
আরেকটি উপায় হ'ল প্রথমে আপনার অনুরোধটি প্রোগ্রাম্যাটিকভাবে করা, তারপরে আপনি যা অনুরোধ করেছিলেন তা থেকে ইউআইবিউবভিউ লোড করুন। ধরা যাক আপনি উপরের দ্বিতীয় উদাহরণটি গ্রহণ করেছেন, যেখানে NSString *page
কল করার ফলস্বরূপ আপনার কাছে রয়েছে stringWithContentsOfURL:encoding:error:
। তারপরে আপনি সেই স্ট্রিংটি ওয়েব ভিউতে loadHTMLString:baseURL:
ঠেকাতে পারেন, ধরে নিবেন আপনি যে অনুরোধ করেছিলেন এনএসআরএল ধরে রেখেছেন:
[yourWebView loadHTMLString:page baseURL:requestURL];
তবে আমি নিশ্চিত নই, তবে এটি আপনার লোড করা পৃষ্ঠায় পাওয়া জাভাস্ক্রিপ্টটি চালিত হবে (পদ্ধতিটির নাম, loadHTMLString
কিছুটা দ্বিধাবিভক্ত, এবং ডক্স এটি সম্পর্কে বেশি কিছু বলে না)।
আরও তথ্যের জন্য:
NSString *html = [webView stringByEvaluatingJavaScriptFromString:@"document.documentElement.outerHTML"];
আমার জন্য এখন বেশ কয়েকবার জীবন রক্ষাকারী হয়েছে। এটি যতটা সম্ভব নথি থেকে ফিরে আসবে বলে মনে হচ্ছে।
আপনি যদি ইতিমধ্যে-লোড হওয়া UIWebView, স্ট্রিংবাইয়েওয়ালুয়েটিং জাভা স্ক্রিপ্টফ্রস্ট্রিংয়ের সামগ্রীগুলি বের করতে চান। উদাহরণ স্বরূপ:
NSString *html = [webView stringByEvaluatingJavaScriptFromString: @"document.body.innerHTML"];
মনে রাখবেন যে NSString স্ট্রিংউইথ কনটেন্টস ওউফআরএল একই অনুরোধটি করে UIWebView এর চেয়ে সম্পূর্ণ আলাদা ব্যবহারকারী-এজেন্ট স্ট্রিংয়ের প্রতিবেদন করবে। সুতরাং যদি আপনার সার্ভারটি ব্যবহারকারী-এজেন্ট সচেতন এবং কে এটি জিজ্ঞাসা করছে তার উপর নির্ভর করে বিভিন্ন এইচটিএমএল ফেরত পাঠাচ্ছে, আপনি এইভাবে সঠিক ফলাফল পেতে পারেন না।
এছাড়াও নোট করুন যে @"document.body.innerHTML"
উপরে বর্ণিতগুলি কেবল বডি ট্যাগের মধ্যে প্রদর্শিত হবে। আপনি যদি ব্যবহার করেন তবে আপনি @"document.all[0].innerHTML"
মাথা এবং শরীর উভয়ই পাবেন। যা এখনও ইউআইউইউভিউ ভিউয়ের সম্পূর্ণ বিষয়বস্তু নয়, যেহেতু এটি! ডক্টাইপ বা এইচটিএমএল ট্যাগগুলি ফিরে পাবে না, তবে এটি অনেক বেশি কাছাকাছি।
(এক্সকোড 5 আইওএস 7) আইওএস 7 এবং এক্সকোড 5 এর জন্য ইউনিভার্সাল অ্যাপ উদাহরণ It এটি একটি মুক্ত উত্স প্রকল্প / উদাহরণ এখানে অবস্থিত: সিম্পিওয়েভভিউয়ের লিঙ্ক (প্রকল্প জিপ এবং উত্স কোড উদাহরণ)
ইউআইওয়েবভিউ` থেকে এইচটিএমএল পান `
let content = uiWebView.stringByEvaluatingJavaScript(from: "document.body.innerHTML")
ইউআইওয়েবভিউতে এইচটিএমএল সেট করুন
//Do not forget to extend a class from `UIWebViewDelegate` and nil the delegate
func someFunction() {
let uiWebView = UIWebView()
uiWebView.loadHTMLString("<html><body></body></html>", baseURL: nil)
uiWebView.delegate = self as? UIWebViewDelegate
}
func webViewDidFinishLoad(_ webView: UIWebView) {
//ready to be processed
}