javascript - 检查 onPageFinished 是否完成

标签 javascript java android

我仍然是编程的初学者,目前我的 web View 有代码,我有一个 onPageFinished ,里面有 JavaScript 代码,可以从我的 web View 检索纯文本。但 onPageFinished 将始终在我的主线程之后完成,之后我无法继续执行其他任何操作。

我是否可以进行检查以等待 onPageFinished 完成或延迟我的主线程,以便它不会在 onPageFinished 之前结束?我迫切需要解决方案。

这是我的代码。

WebViewActivity

public class WebViewActivity extends Activity{

String[] paraText;

@TargetApi(Build.VERSION_CODES.LOLLIPOP)
@SuppressLint("JavascriptInterface")
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_webview);

    WebView webview = (WebView) findViewById(R.id.webView);
    FloatingActionButton floatingActionButton = (FloatingActionButton) findViewById(R.id.button_voice);


    //Retrieve value from CustomAdapter
    Intent intent = getIntent();
    String address = intent.getStringExtra("URL");




    //Enable JavaScript
    webview.getSettings().setJavaScriptEnabled(true);
    webview.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
    webview.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
    webview.getSettings().setDomStorageEnabled(true);
    webview.addJavascriptInterface(this,"myjava");
    webview.setWebViewClient(new WebViewClient() {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
            return super.shouldOverrideUrlLoading(view, request);

        }

        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            super.onPageStarted(view, url, favicon);
        }

        @Override
        public void onPageFinished(WebView view, String url) {
            /*view.loadUrl("javascript:(function() { " + "document.getElementById('mk-navbar-secondary').style.display=\"none\"; " + "})()");
            view.loadUrl("javascript:(function() { " + "document.getElementsByClassName('uk-list uk-clearfix uk-margin-bottom-remove').style.display=\"none\"; " + "})()");
            view.loadUrl("javascript:(function() { " + "document.getElementsByTagName('section')[0].style.display=\"none\"; " + "})()");
            view.loadUrl("javascript:(function() { " + "document.getElementsByTagName('section')[1].style.display=\"none\"; " + "})()");
            view.loadUrl("javascript:(function() { " + "document.getElementsByTagName('section')[3].style.display=\"none\"; " + "})()");*/

            view.loadUrl("javascript:var paraTexts = []");
            view.loadUrl("javascript:var count = document.getElementsByTagName('p');");
            view.loadUrl("javascript:var loop;");
            view.loadUrl("javascript:for(loop = 0; loop < count.length; loop++){ paraTexts.push( document.getElementsByTagName('p')[loop].innerHTML); }");
            view.loadUrl("javascript:myjava.onData(paraTexts);");

            Log.d("OUTPUT TEST","onPageFinished");

        }
    });


    webview.loadUrl(address);


}

//This method will be registered as a JavaScript interface
@JavascriptInterface
@SuppressWarnings("unused")
public void onData(String[] value){
    this.paraText = value;
    Log.d("OUTPUT TEST onDATA",value[0]);
    Log.d("OUTPUT TEST onDATA.P",paraText[0]);
    //new SpeakText(getApplicationContext(),paraText,floatingActionButton).execute();

}

public void onDataDisplay(){

    Log.d("OUTPUT TEST disDATA",paraText[0]);
}
}

最佳答案

既然我找到了自己的解决方案;

如上所述here ,让 UI 线程 hibernate 是不应该做的事情,因为它会暂停内部的所有 Activity 。因此使用处理程序 postDelay 来代替。

解决方案代码:

 Handler handler = new Handler();
 handler.postDelayed(new Runnable(){
  @Override
  public void run(){
  // do something
    }
  }, 3000);

关于javascript - 检查 onPageFinished 是否完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38752285/

相关文章:

android - FFmpeg 与 Vitamio

java - Android中有多路通话时如何识别通话断开

javascript - 如何获取特定行的索引以将其删除

java - HttpServletResponse.setHeader 方法应该如何处理 null 值?

java - 测试 4 个号码,看看其是否有 3 个唯一号码

javascript - java加密aes值和javascript加密值不匹配

android - html5 Canvas 作为应用程序

javascript - 导出HighCharts图表具体高度宽度

javascript - 通过单击 div 选择多选项

javascript - 如何在安全或非安全 http 请求上获取 location.href