दिलचस्प पोस्ट
शब्दों को जावास्क्रिप्ट नंबर एंड्रॉइड- त्रुटि: कार्य के लिए निष्पादन विफल ': ऐप: ट्रांसफ़ॉर्म क्लासेसविड्थडेक्सफोर' यूआईएलबल में लाइन रिक्ति को कैसे नियंत्रित किया जाए वास्तव में क्या करता है = अजगर में? एच 264 वीडियो स्ट्रीम के आयामों को प्राप्त करना तत्वों की सरणी से jQuery न्यूनतम / अधिकतम प्रॉपर्टी गतिशील रूप से विद्यमान टैब फिर से बनाने के बिना चमकदार रूप से भूखंडों के साथ टैब बनाना डॉकर कंटेनर के अंदर से डॉकर्स होस्ट का आईपी पता कैसे प्राप्त करें फास्ट और कॉम्पैक्ट ऑब्जेक्ट सीरियललाइज़ेशन में एनएटी कोणीय जेएस: यूआई-राउटर का प्रयोग करके एक ऑब्जेक्ट को एक राज्य में पास करें एंड्रॉइड में एक HTML लिंक से एक पृष्ठ का html स्रोत कैसे प्राप्त करें? VS2008 कारण समस्याओं के साथ में दृश्य स्टूडियो 2010 की ओर से स्थापित होगा? किसी भी यूट्यूब यूआरएल से यूट्यूब वीडियो आईडी प्राप्त करने के लिए RegEx पैटर्न क्या कोणीय मार्गों के वैकल्पिक पैरामीटर मान हैं? जावा में Enum फायदे?

वेबवरी से HTML सामग्री कैसे प्राप्त करें?

वेबवेस्टमेंट से html कोड पाने का सबसे सरल तरीका कौन सा है? मैंने स्टैक ओवरफ्लो और Google से कई तरीकों की कोशिश की है, लेकिन एक सटीक पद्धति नहीं मिल पाई है। कृपया सटीक तरीके का उल्लेख करें

public class htmldecoder extends Activity implements OnClickListener,TextWatcher { TextView txturl; Button btgo; WebView wvbrowser; TextView txtcode; ImageButton btcode; LinearLayout llayout; int flagbtcode; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.htmldecoder); txturl=(TextView)findViewById(R.id.txturl); btgo=(Button)findViewById(R.id.btgo); btgo.setOnClickListener(this); wvbrowser=(WebView)findViewById(R.id.wvbrowser); wvbrowser.setWebViewClient(new HelloWebViewClient()); wvbrowser.getSettings().setJavaScriptEnabled(true); wvbrowser.getSettings().setPluginsEnabled(true); wvbrowser.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); wvbrowser.addJavascriptInterface(new MyJavaScriptInterface(),"HTMLOUT"); //wvbrowser.loadUrl("http://www.google.com"); wvbrowser.loadUrl("javascript:window.HTMLOUT.showHTML('<html>'+document.getElementsByTagName('html')[0].innerHTML+'</html>');"); txtcode=(TextView)findViewById(R.id.txtcode); txtcode.addTextChangedListener(this); btcode=(ImageButton)findViewById(R.id.btcode); btcode.setOnClickListener(this); } public void onClick(View v) { if(btgo==v) { String url=txturl.getText().toString(); if(!txturl.getText().toString().contains("http://")) { url="http://"+url; } wvbrowser.loadUrl(url); //wvbrowser.loadData("<html><head></head><body><div style='width:100px;height:100px;border:1px red solid;'></div></body></html>","text/html","utf-8"); } else if(btcode==v) { ViewGroup.LayoutParams params1=wvbrowser.getLayoutParams(); ViewGroup.LayoutParams params2=txtcode.getLayoutParams(); if(flagbtcode==1) { params1.height=200; params2.height=220; flagbtcode=0; //txtcode.setText(wvbrowser.getContentDescription()); } else { params1.height=420; params2.height=0; flagbtcode=1; } wvbrowser.setLayoutParams(params1); txtcode.setLayoutParams(params2); } } public class HelloWebViewClient extends WebViewClient { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } /*@Override public void onPageFinished(WebView view, String url) { // This call inject JavaScript into the page which just finished loading. wvbrowser.loadUrl("javascript:window.HTMLOUT.processHTML('<head>'+document.getElementsByTagName('html')[0].innerHTML+'</head>');"); }*/ } class MyJavaScriptInterface { @SuppressWarnings("unused") public void showHTML(String html) { txtcode.setText(html); } } public void afterTextChanged(Editable s) { // TODO Auto-generated method stub } public void beforeTextChanged(CharSequence s, int start, int count, int after) { // TODO Auto-generated method stub } public void onTextChanged(CharSequence s, int start, int before, int count) { wvbrowser.loadData("<html><div"+txtcode.getText().toString()+"></div></html>","text/html","utf-8"); } } 

वेब के समाधान से एकत्रित समाधान "वेबवरी से HTML सामग्री कैसे प्राप्त करें?"

असल में इस सवाल के कई जवाब हैं उनमें से 2 हैं:

  • यह पहला आपके जैसा ही है, मुझे लगता है हम इसे एक ही ट्यूटोरियल से प्राप्त कर चुके हैं।

 public class TestActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.webview); final WebView webview = (WebView) findViewById(R.id.browser); webview.getSettings().setJavaScriptEnabled(true); webview.addJavascriptInterface(new MyJavaScriptInterface(this), "HtmlViewer"); webview.setWebViewClient(new WebViewClient() { @Override public void onPageFinished(WebView view, String url) { webview.loadUrl("javascript:window.HtmlViewer.showHTML" + "('<html>'+document.getElementsByTagName('html')[0].innerHTML+'</html>');"); } }); webview.loadUrl("http://android-in-action.com/index.php?post/" + "Common-errors-and-bugs-and-how-to-solve-avoid-them"); } class MyJavaScriptInterface { private Context ctx; MyJavaScriptInterface(Context ctx) { this.ctx = ctx; } public void showHTML(String html) { new AlertDialog.Builder(ctx).setTitle("HTML").setMessage(html) .setPositiveButton(android.R.string.ok, null).setCancelable(false).create().show(); } } } 

इस तरह से आप जावास्क्रिप्ट के माध्यम से html को पकड़ लेते हैं सबसे सुंदर तरीका नहीं है, लेकिन जब आप अपना जावास्क्रिप्ट इंटरफ़ेस रखते हैं, तो आप इसे टिंकर करने के लिए अन्य तरीकों को जोड़ सकते हैं।


  • एक अन्य तरीका एचटीटीपी क्लाइंट का इस्तेमाल कर रहा है ।

आपके द्वारा चुने गए विकल्प भी निर्भर करता है, मुझे लगता है, पुनः प्राप्त HTML के साथ आप क्या करना चाहते हैं …

एंड्रॉइड 4.2 के लिए, सभी जावास्क्रिप्ट कार्यों के लिए @ जावास्क्रिप्ट इंटरफेस को जोड़ने के लिए मत भूलना

किटकैट और इसके बाद के संस्करण में, आप webview पर जावास्क्रिप्ट पद्धति का evaluateJavascript कर सकते हैं

 wvbrowser.evaluateJavascript( "(function() { return ('<html>'+document.getElementsByTagName('html')[0].innerHTML+'</html>'); })();", new ValueCallback<String>() { @Override public void onReceiveValue(String html) { Log.d("HTML", html); // code here } }); 

अधिक उदाहरणों के लिए इस उत्तर को देखें

एंड्रॉइड वेबव्यू सिर्फ एक और रेंडर इंजन है, जो कि एचटीएमएल सामग्री को एक एचटीटीपी सर्वर से डाउनलोड करता है, जैसे क्रोम या फ़ायरफ़ॉक्स। मुझे पता नहीं है कि आपको WebView से दिए गए पृष्ठ (या स्क्रीनशॉट) की आवश्यकता क्यों है। अधिकतर स्थिति के लिए, यह आवश्यक नहीं है। आप सीधे HTTP सर्वर से कच्चे HTML सामग्री प्राप्त कर सकते हैं।

एचटीपीयूआरएलकॉन्नेक्शन या एचटीटीपी क्लाइंट का इस्तेमाल करते हुए कच्चा स्ट्रीम मिलने के बारे में पहले से ही पोस्ट किया गया है। वैकल्पिक रूप से, एंड्रॉइड पर एचटीएमएल सामग्री पार्स / प्रोसेस पर काम करते समय एक बहुत ही आसान लाइब्रेरी होती है: जेसूप , यह एचटीएमएल सामग्री फ़ॉर्म एचटीटीपी सर्वर पाने के लिए बहुत सरल एपीआई प्रदान करता है, और केवल एचटीएमएल दस्तावेज़ का सार प्रस्तुत करने में मदद करता है, ताकि हमें एचटीएमएल पार्सिंग का प्रबंधन न करने में सहायता मिल सके। अधिक ओ ओ शैली में, लेकिन बहुत आसानी से:

 // Single line of statement to get HTML document from HTTP server. Document doc = Jsoup.connect("http://en.wikipedia.org/").get(); 

उदाहरण के लिए, उदाहरण के लिए, आप पहले HTML दस्तावेज़ को डाउनलोड करना चाहते हैं, ताकि प्रस्तुति के लिए WebView पर जाने से पहले उसे कुछ कस्टम सीएसएस या जावास्क्रिप्ट जोड़ दें। अपनी आधिकारिक वेबसाइट पर बहुत अधिक, इसकी जांच करने के लिए मूल्य।

एक टच प्वाइंट मुझे पता चला कि प्रोजेगर कॉन्फ़िगरेशन में इसे "छिपा हुआ" रखा जाना चाहिए। जबकि एचटीएमएल पाठक एप को डीबग करने के दौरान सिर्फ जावास्क्रिप्ट अंतरफलक के जरिए इजाजत देता है, यह प्रोजेक्ट के जरिये ऐप चलाया जाता है, जब तक कि एचटीएमएल रीडर फंक्शन प्रोगवार्ड कॉन्फ़िग फाइल में घोषित नहीं किया जाता है, जैसे कि:

 -keepclassmembers class <your.fully.qualified.HTML.reader.classname.here> { public *; } 

Android 2.3.6, 4.1.1 और 4.2.1 पर परीक्षण और पुष्टि की।

Android सुरक्षा चिंताओं के लिए ऐसा करने नहीं देगा एक बुरा डेवलपर उपयोगकर्ता द्वारा लॉगिन की गई जानकारी को बहुत आसानी से चुर सकता है।

इसके बजाए, आपको प्रदर्शित होने वाले पाठ को वेबवॉल में प्रदर्शित होने से पहले पकड़ना होगा। यदि आप एक प्रतिक्रिया हैंडलर (अन्य उत्तरों के अनुसार) सेट अप नहीं करना चाहते हैं, तो मुझे कुछ तय करने के साथ यह तय मिला है:

 URL url = new URL("https://stackoverflow.com/questions/1381617"); URLConnection con = url.openConnection(); Pattern p = Pattern.compile("text/html;\\s+charset=([^\\s]+)\\s*"); Matcher m = p.matcher(con.getContentType()); /* If Content-Type doesn't match this pre-conception, choose default and * hope for the best. */ String charset = m.matches() ? m.group(1) : "ISO-8859-1"; Reader r = new InputStreamReader(con.getInputStream(), charset); StringBuilder buf = new StringBuilder(); while (true) { int ch = r.read(); if (ch < 0) break; buf.append((char) ch); } String str = buf.toString(); 

यह बहुत सी कोड है, और आप इसे कॉपी / पास्टर करने में सक्षम होना चाहिए, और इसके अंत में str में वेबव्यू में खींचा एक ही HTML होगा। यह जवाब सरल तरीके से वेब पेज से html में जावा में एक स्ट्रिंग में सही ढंग से लोड करने के लिए है और यह एंड्रॉइड पर भी काम करना चाहिए। मैंने इसे परीक्षण नहीं किया है और इसे स्वयं नहीं लिखा है, लेकिन यह आपकी मदद कर सकता है

साथ ही, जो यूआरएल इस खींच रहा है वह कठिन है, इसलिए आपको इसे बदलना होगा।

क्यों नहीं html पहले प्राप्त करें और इसे वेब दृश्य पर पास करें?

 private String getHtml(String url){ HttpGet pageGet = new HttpGet(url); ResponseHandler<String> handler = new ResponseHandler<String>() { public String handleResponse(HttpResponse response) throws ClientProtocolException, IOException { HttpEntity entity = response.getEntity(); String html; if (entity != null) { html = EntityUtils.toString(entity); return html; } else { return null; } } }; pageHTML = null; try { while (pageHTML==null){ pageHTML = client.execute(pageGet, handler); } } catch (ClientProtocolException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return pageHTML; } @Override public void customizeWebView(final ServiceCommunicableActivity activity, final WebView webview, final SearchResult mRom) { mRom.setFileSize(getFileSize(mRom.getURLSuffix())); webview.getSettings().setJavaScriptEnabled(true); WebViewClient anchorWebViewClient = new WebViewClient() { @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { super.onPageStarted(view, url, favicon); //Do what you want to with the html String html = getHTML(url); if( html!=null && !url.equals(lastLoadedURL)){ lastLoadedURL = url; webview.loadDataWithBaseURL(url, html, null, "utf-8", url); } } 

यह लगभग ऐसा करना चाहिए जो आप करना चाहते हैं यह WebView से HTML कोड प्राप्त करना संभव है और अपने उत्तर के लिए https://stackoverflow.com/users/325081/aymon-fournier को चिल्लाते हैं।

मैं वेबव्यू से HTML को निकालने की कोशिश करने के बजाय सुझाव देता हूं, आप URL से HTML निकालें इसके द्वारा, मेरा अर्थ है कि आपके लिए HTML को पार करने के लिए एक तीसरी पार्टी लायब्रेरी जैसे जेसूप का उपयोग करना निम्न कोड आपके लिए विशिष्ट URL से HTML प्राप्त करेगा

 public static String getHtml(String url) throws ClientProtocolException, IOException { HttpClient httpClient = new DefaultHttpClient(); HttpContext localContext = new BasicHttpContext(); HttpGet httpGet = new HttpGet(url); HttpResponse response = httpClient.execute(httpGet, localContext); String result = ""; BufferedReader reader = new BufferedReader( new InputStreamReader( response.getEntity().getContent() ) ); String line = null; while ((line = reader.readLine()) != null){ result += line + "\n"; } return result; } 

Sephy के रूप में HttpClient का उपयोग करने का प्रयास करें:

 public String getHtml(String url) { HttpClient vClient = new DefaultHttpClient(); HttpGet vGet = new HttpGet(url); String response = ""; try { ResponseHandler<String> vHandler = new BasicResponseHandler(); response = vClient.execute(vGet, vHandler); } catch (Exception e) { e.printStackTrace(); } return response; } 

एचटीएमएल सामग्री के मूल्य पाने के लिए बस अपने जावास्क्रिप्ट में ज्वेश्रिप्ट तरीकों की जरूरत है। जैसा कि आपके कोड के ऊपर कुछ बदलाव होने की ज़रूरत है

  public class htmldecoder extends Activity implements OnClickListener,TextWatcher { Button btsubmit; // this button in your xml file WebView wvbrowser; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.htmldecoder); btsubmit=(Button)findViewById(R.id.btsubmit); btsubmit.setOnClickListener(this); wvbrowser=(WebView)findViewById(R.id.wvbrowser); wvbrowser.setWebViewClient(new HelloWebViewClient()); wvbrowser.getSettings().setJavaScriptEnabled(true); wvbrowser.getSettings().setPluginsEnabled(true); wvbrowser.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); MyJavaScriptInterface myinterface=new MyJavaScriptInterface(); wvbrowser.addJavascriptInterface(myinterface,"interface"); webView.loadUrl("file:///android_asset/simple.html"); //use one html file for //testing put your html file in assets. Make sure that you done JavaScript methods to get //values for html content in html file . } public void onClick(View v) { if(btsubmit==v) { webView.loadUrl("javascript:showalert()");// call javascript method. //wvbr } } final class MyJavaScriptInterface { MyJavaScriptInterface() { } public void sendValueFromHtml(String value) { System.out.println("Here is the value from html::"+value); } } } 

HTML में आपका जावास्क्रिप्ट

  <script type="text/javascript"> //<![CDATA[ var n1; function callme(){ n1=document.getElementById("FacadeAL").value; } function showalert(){ window.interface.sendValueFromHtml(n1);// this method calling the method of interface which //you attached to html file in android. // & we called this showalert javasript method on //submmit buttton click of android. } //]]> </script> 

और सुनिश्चित करें कि आप कॉलम को नीचे html में कॉल कर रहे हैं

<input name="FacadeAL" id="FacadeAL" type="text" size="5" onblur="callme()"/>
आशा है कि यह आपकी मदद करेगा।

मैं कुछ परावर्तन दृष्टिकोण को देखने का सुझाव देता हूं, अगर आपके पास डिबगर पर खर्च करने का समय है (खेद है लेकिन मेरे पास नहीं था)

android.webkit.WebView क्लास के loadUrl() विधि से शुरू करना:

http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.2_r1.1/android/webkit/WebView.java#WebView.loadUrl%28java.lang.String % 2Cjava.util.Map% 29

आपको android.webkit.BrowserFrame पर आ जाना चाहिए जो nativeLoadUrl() देशी विधि को कॉल करते हैं:

http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.2_r1.1/android/webkit/BrowserFrame.java#BrowserFrame.nativeLoadUrl%28java.lang.String % 2Cjava.util.Map% 29

मूल पद्धति का कार्यान्वयन यहाँ होना चाहिए:

http://gitorious.org/0xdroid/external_webkit/blobs/a538f34148bb04aa6ccfbb89dfd5fd784a4208b1/WebKit/android/jni/WebCoreFrameBridge.cpp

अच्छे नसीब की शुभकामनाय!

उपरोक्त विधियों के लिए यदि आपके पास एक वेब यूआरएल है, लेकिन यदि आपके पास स्थानीय एचटीएमएल है तो आपके पास इस कोड से भी html हो सकता है

 AssetManager mgr = mContext.getAssets(); try { InputStream in = null; if(condition)//you have a local html saved in assets { in = mgr.open(mFileName,AssetManager.ACCESS_BUFFER); } else if(condition)//you have an url { URL feedURL = new URL(sURL); in = feedURL.openConnection().getInputStream();} // here you will get your html String sHTML = streamToString(in); in.close(); //display this html in the browser or web view } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } public static String streamToString(InputStream in) throws IOException { if(in == null) { return ""; } Writer writer = new StringWriter(); char[] buffer = new char[1024]; try { Reader reader = new BufferedReader(new InputStreamReader(in, "UTF-8")); int n; while ((n = reader.read(buffer)) != -1) { writer.write(buffer, 0, n); } } finally { } return writer.toString(); }