我正在尝试将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内容后,按预期方式添加了网桥。