addJavascriptInterface函数不适用于API 21

时间:2016-01-24 16:05:53

标签: android android-webview

我试图在我发现的WebView中添加一个javascript界面​​。 我遵循了所有标准教程,仍然在努力完成任务。 添加javascript界面​​时,我没有得到任何异常或错误,但是当从JS显式调用桥时,我收到以下错误:

private static IEnumerable<object> GetArguments(MethodCallExpression body)
{
    return body.Arguments.Select(
        expression => Expression.Lambda<Func<object>>(
            Expression.Convert(expression, typeof(object))).Compile()());
}

添加javascript界面​​:

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

我的界面:     public class ImpressionSyncJsInterface {         私有最终上下文上下文;

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;
    }
});

Javascript执行:

    public ImpressionSyncJsInterface(Context context) {
        this.context = context;
    }

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

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:16)

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

addJavascriptInterface 函数仅适用于 BEFORE loadUrl / loadData 函数。

在我的情况下 - 我期望addJavascriptInterface注入一个JS桥,但我从未重新加载WebView内容,因此它从未被主动注入。

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