gpt4 book ai didi

android - 如何从 webview 获取 html 内容?

转载 作者:IT老高 更新时间:2023-10-28 13:02:34 29 4
gpt4 key购买 nike

从 webview 获取 html 代码的最简单方法是什么?我尝试了 stackoverflow 和 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");

}

}

最佳答案

其实这个问题有很多答案。这是其中的两个:

  • 第一个和你的几乎一样,我想我们是从同一个教程中得到的。

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();
}

}
}

这样您就可以通过 javascript 获取 html。不是最漂亮的方法,但是当您拥有 javascript 界面时,您可以添加其他方法来修补它。


  • 另一种方法是使用像 there 这样的 HttpClient。 .

我认为,您选择的选项还取决于您打算如何处理检索到的 html...

关于android - 如何从 webview 获取 html 内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8200945/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com