我的问题是我有一个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
}
}