簡體   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