繁体   English   中英

未在API 18上添加JavaScriptInterface

[英]JavaScriptInterface not added on API 18

我正在使用WebView在我的应用程序中执行一些JS代码。 到目前为止,这在我的KitKat(targetSdk)设备以及2.2(minSdk)模拟器上都可以正常工作。
在4.3 Nexus 7上,我遇到了错误。 似乎没有注入JS对象。

Uncaught ReferenceError: android is not defined at 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之间插入一个睡眠(1秒就足够了)。 该API不太可能具有竞争优势,但易于检查。
  • 在调用loadUrl(“ javascript:...”)之前加载页面。 调用类似loadUrl("about:blank")loadData("<p>foo</p>", ...); 睡一会儿

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

找到了一种解决方法,知道为什么它在4.3上不起作用仍然很有趣。

因此,我没有使用loadUrl ,而是用一段HTML包围了JS,并使用了loadData

webView.loadData("<!DOCTYPE html><html><head><script type=\"text/javascript\">function go(){console.log(android.getInput());}</script></head><body onload=\"javascript:go()\"></body></html", "text/html", "UTF-8");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM