重新渲染完成后,Android Webview运行JS代码

时间:2018-07-17 21:52:25

标签: javascript android webview rendering inject

我的问题是我有一个Webview,它指向一个我无法访问源代码的网页。所以我的想法是关于何时通过android webview打开页面,我运行了一个javascript代码,该代码将我的用户名和密码字段值返回给我。 但是问题是在我运行从不同生命周期方法(onPageFinished,onPageCommitVisible)尝试的JS代码时,页面未完全呈现,因此我在JS代码中的queryselectors无法正常工作。

有什么想法可以解决这个问题吗? 在下面的示例中,当我调用view.loadUrl(“ javascript:” + myJavaScript2);时遇到的问题该页面未完全加载,因此JS无法正常工作。

 WebSettings settings = webView.getSettings();
// Enable Javascript
settings.setJavaScriptEnabled(true);      
// Allow use of Local Storage
settings.setDomStorageEnabled(true);

// Enable remote debugging via chrome://inspect
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
    WebView.setWebContentsDebuggingEnabled(true);


myWebView.setWebViewClient(new MyWebViewClient());
myWebView.addJavascriptInterface(new MyJavaScriptInterface(), "MYOBJECT"

MyWebViewClient:

private class MyWebViewClient extends WebViewClient {

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            Log.d(TAG, "shouldOverrideUrlLoading: " + url);
            view.loadUrl(url);

            return true;
        }

        @Override
        public void onPageCommitVisible(WebView view, String url) {
            String myJavaScript2 = "document.querySelector(\"#username_container\").querySelector(\".input\")value =  \"MyUserName\";"+
"window.MYOBJECT.processHTML('Email: ' + email+ ' password: ' + password);";


     Log.d("MYJAVASCRIPT", myJavaScript2);
     view.loadUrl("javascript:" + myJavaScript2);


    }
@Override
    public void onPageFinished(WebView view, String url) {
        Log.d("TAG", "onPageFinished: "+ url);
    }
   }

class MyJavaScriptInterface {
    @JavascriptInterface
    public void processHTML(String html) {
        Log.d("MyJAVASCRIPT", html);
//Store  username and password, we get it from html parameter



}

}

0 个答案:

没有答案