addJavascriptInterface

addJavascriptInterface

我正在尝试将javascript界面​​添加到我发现的WebView中。
我遵循了所有标准教程,但仍然对任务感到困惑。
添加javascript接口(interface)时,没有任何异常或错误,但是从JS显式调用桥时,出现以下错误:

I/chromium: [INFO:CONSOLE(1)] "Uncaught ReferenceError: JSNativeBridge is not defined", source:  (1)

添加javascript界面​​:
new Handler(context.getMainLooper()).post(new Runnable() {
    @Override
    public void run() {
        WebView webView = webViews[0];
        if (Constants.DEBUG_MODE) {
            webView.setWebChromeClient(new WebChromeClient());
            webView.getSettings().setJavaScriptEnabled(true);
        }
        ImpressionSyncJsInterface impressionSyncJsInterface = new ImpressionSyncJsInterface(context);
        webView.addJavascriptInterface(impressionSyncJsInterface, JS_BRIDGE_NAME);
        didAddInterfaceToWebView = true;
    }
});

我的界面:
公共(public)类ImpressionSyncJsInterface {
私有(private)最终上下文上下文;
    public ImpressionSyncJsInterface(Context context) {
        this.context = context;
    }

    @JavascriptInterface
    public void foo() {
        Log.e("TEST", "test");
    }
}

Javascript执行:
final String javascriptInjectionTest = "javascript: " + JS_BRIDGE_NAME + ".foo();";

new Handler(Looper.getMainLooper()).post(new Runnable() {
    @Override
    public void run() {
        webView.loadUrl(javascriptInjectionTest);
    }
});

任何帮助都感激不尽。

最佳答案

找出问题所在,因此我将分享我的见解:

仅当在loadUrl/loadData函数之前调用时,addJavascriptInterface函数才适用。

就我而言-我期望addJavascriptInterface注入(inject)JS桥,但我从未重新加载WebView内容,因此从未主动注入(inject)它。

重新加载WebView HTML内容后,按预期方式添加了网桥。

10-08 16:07