我试图在我发现的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");
}
}
非常感谢任何帮助。
答案 0 :(得分:16)
找出问题所在,我将分享我的见解:
addJavascriptInterface 函数仅适用于 BEFORE loadUrl / loadData 函数。
在我的情况下 - 我期望addJavascriptInterface注入一个JS桥,但我从未重新加载WebView内容,因此它从未被主动注入。
重新加载WebView HTML内容后,按预期添加了网桥。