![](/img/trans.png)
[英]None of the methods in the added interface have been annotated with @android.webkit.JavascriptInterface; they will not be visible in API 17
[英]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
。 有任何想法嗎?
提前致謝!
可能有很多事情。 您可以嘗試以下方法來縮小范圍:
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.