gpt4 book ai didi

API 18 上未添加 JavaScriptInterface

转载 作者:行者123 更新时间:2023-12-03 12:34:18 25 4
gpt4 key购买 nike

我正在使用 WebView 在我的应用程序中执行一些 JS 代码。到目前为止,这在我的 KitKat (targetSdk) 设备以及 2.2 (minSdk) 模拟器上运行良好。
但在 4.3 Nexus 7 上我遇到了错误。看来 JS 对象没有被注入(inject)。

Uncaught ReferenceError :android 未在 null:1 处定义

遵循我的代码的精简版本:

public void getData(Context ctx) {
WebView webView = new WebView(ctx);
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
webView.addJavascriptInterface(new AndroidInterface(), "android");
webView.loadUrl("javascript:console.log(android.getInput());");
}

public class AndroidInterface {
@JavascriptInterface
public String getInput() {
return "FOO";
}
}

JS 本身执行得很好,因此 console.log('FOO'); 按预期打印 FOO。但一旦我尝试访问该界面,我就会收到ReferenceError。有什么想法吗?
提前致谢!

最佳答案

可能有很多原因。您可以尝试以下方法来缩小范围:

  • 在 add 和 loadUrl 之间插入一个 sleep (1 秒就足够了)。该 API 不太可能很复杂,但很容易检查。
  • 在调用 loadUrl("javascript:...") 之前加载页面。调用类似 loadUrl("about:blank") 的电话或loadData("<p>foo</p>", ...);然后睡一会儿。

调用loadUrl("javascript:...")内部评估当前页面中的 JavaScript,它不执行“真正的”导航。可能是您要添加的接口(interface)没有被您的 loadUrl("javascript:...") 所处的上下文所拾取。执行调用(特别是 WebView 构建后加载的“起始”页面有点特殊),并且执行导航使 WebView“拾取”新添加的界面。

关于API 18 上未添加 JavaScriptInterface,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23800135/

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