0

我一直在开发一个小应用程序,它应该在 web 视图中调用 javascript,而 js 应该回调一个 java 方法。我的目标是拥有

- - - - - - - 结果

打印了,但我从来没有看到它!我的代码很简单:

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.webkit.JavascriptInterface;
import android.webkit.WebSettings.PluginState;
import android.webkit.WebView;

public class MainActivity extends Activity {

    private WebView wv;

    private Object obj = new Object() {
        @JavascriptInterface
        public void onLogin() {
            System.out.println("------------- result ");
        }
    };

    private String jsString = "var checkLogin = function() {" +
            "window.AndroidJSBridge.onLogin();" + 
        "}; " + 
        "checkLogin();";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        System.out.println("------------- start");

        wv = (WebView) findViewById(R.id.login_webview);
        wv.addJavascriptInterface(obj, "AndroidJSBridge");
        wv.getSettings().setPluginState(PluginState.ON);
        wv.getSettings().setJavaScriptEnabled(true);
        wv.loadData("", "text/html", null);
        wv.loadUrl("javascript: " + jsString);
    }

}
4

1 回答 1

0

首先,在调用它之前,您需要确保 webview 已完成页面加载:

wv.setWebViewClient(new WebViewClient() {
     public void onPageFinished(WebView view, String url)
        {
            view.loadUrl("javascript: " + jsString);
        }
    });

其次,你不应该需要“窗口”。调用 javascript 接口(尚未对此进行测试,但我的代码不需要它存在):

private String jsString = "var checkLogin = function() {" +
        "AndroidJSBridge.onLogin();" + 
    "}; " + 
    "checkLogin();";

让我知道这是否适合你。

于 2013-10-30T16:43:47.940 回答