gpt4 book ai didi

android - addJavascriptInterface 函数不适用于 API 21

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:37:50 24 4
gpt4 key购买 nike

我正在尝试将 javascript 接口(interface)添加到我找到的 WebView。我遵循了所有标准教程,但仍然在为这项任务而苦苦挣扎。添加 javascript 接口(interface)时,我没有得到任何异常或错误,但是当从 JS 显式调用桥时,我得到以下错误:

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

添加javascript接口(interface):

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 class ImpressionSyncJsInterface {
private final Context context;

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

最佳答案

解决了问题,所以我将分享我的见解:

addJavascriptInterface 函数仅在调用 BEFORE loadUrl/loadData 函数时适用。

在我的例子中——我希望 addJavascriptInterface 注入(inject)一个 JS 桥,但我从未重新加载 WebView 内容,所以它从未被主动注入(inject)。

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

关于android - addJavascriptInterface 函数不适用于 API 21,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34978009/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com