2011-02-05 56 views
4

我寫了一段Java代碼,旨在通過android WebView網關從Javascript調用Java代碼。從Javascript傳遞數據到Android WebView

webView = (WebView) findViewById(R.id.captchaView); 
WebSettings ws = webView.getSettings(); 
ws.setJavaScriptEnabled(true); 
webView.loadUrl("https://google.com/"); 

webView.setWebViewClient(BrowserHandler); 
webView.addJavascriptInterface(new IJavascriptHandler(), "cpjs"); 

WebViewClient BrowserHandler = new WebViewClient() { 
    @Override 
    public void onPageFinished(WebView view, String url) { 
     view.loadUrl("javascript:window.cpjs.onPageLoaded(document.body.innerHTML);void(0);"); 
    } 
}; 

final class IJavascriptHandler { 
    IJavascriptHandler() { 
    } 

    public void onPageLoaded(String html) { 
     // this is called from JS 
     Toast t = Toast.makeText(getApplicationContext(), "Yes", 2000); 
     t.show(); 
    } 
} 

上面的代碼檢查網頁加載,一旦在頁面加載完成後,它會調用它從Java暴露,以便它可以攜帶什麼我從網頁需要JavaScript函數。

這不像預期的那樣工作,它只是每隔幾秒刷新頁面。我不確定這裏有什麼問題?

+0

請問您能否寄給我最新的代碼。在此先感謝 – 2017-02-22 04:14:10

回答

2

好吧,有很多東西在你所做的事情上都很奇怪。

  • 從Java,你正在觸發Javascript ...回調到Java。你認爲這是安全的。

  • 您正在加載Google主頁,它會在遇到Android瀏覽器時執行重定向,這是我最後一次檢查。

  • 您正在嘗試顯示Toast,但您不知道該代碼是否會在主應用程序線程上運行。

+0

您是對的。 Toast將在UI線程上運行。我只是知道這是WebView中的一個錯誤,這就是爲什麼這不起作用。我在Google Groups for Android上有一個線程,我也需要將模擬器從版本2.3卸載回2.2? – Neutralizer 2011-02-05 14:35:22

相關問題