0

WebView を使用して、情報を取得したいサイトの HTML を取得しましたが、Web サイトにアクセスできません (サーバー側、クライアント側のみ)。

javascriptを介してhtmlをプルできます。しかし、コードを実行すると、Javascript が完了する前にデータ フィールドが読み込まれるため、データ フィールドが更新されません。後でJSOUP経由でデータを処理したい。HTTPCLient は LOGIN を使用する Web サイトであり、SSL で保護されているため、アクセスが困難です。WebView(手動ログイン)経由でアクセスし、その後データを取得できます。

ログインを取得または通過する方法、またはすべての html データがロードされるまで 2 番目のスレッドで待機する方法はありますか?

public class MainActivity extends Activity implements OnClickListener {

TextView data;
Button getRost;
WebView webview;
String code;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    data = (TextView) findViewById(R.id.tvData);
    getRost = (Button) findViewById(R.id.btGet);
    getRost.setOnClickListener(this);
    webview = (WebView) findViewById(R.id.wvWeb);

}

@Override
public void onClick(View arg0) {
    // TODO Auto-generated method stub
    switch(arg0.getId())
    {
    case R.id.btGet:
        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" +
                        "('<head>'+document.getElementsByTagName('html')[0].innerHTML+'</head>');");
            }

        });

        webview.loadUrl("URLTHATCONTAINTSINFO");
        data.setText(code); 
    }   


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

}

}
4

1 に答える 1

0

サイトが自己署名証明書を使用している場合は、独自の SSL クライアントを作成し、ログインを処理するためにサイトに送信される内容を確認できる場合は、それを POST 経由で送信できます。

完全な SSL 証明書を使用している場合は、データを POST するだけです...

いずれにせよ、webview にそこからの結果を処理させます。

例:

private void launchWeb() {
    webview = new WebView(this);

    // Where myWebview is the WebView object

    webview.setWebChromeClient(new WebChromeClient());
    webview.setWebViewClient(new MyWebViewClient());

    webview.clearCache(true);
    webview.clearHistory();
    webview.getSettings().setJavaScriptEnabled(true);
    webview.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);

    webview.requestFocus(View.FOCUS_DOWN);

    String postData = "username=" + _username + "&password=" + _password;

    webview.postUrl("https://blahblah.com/somepath",
            EncodingUtils.getBytes(postData, "BASE64"));

}
于 2013-03-21T03:11:32.390 に答える