Próbuję wywołać niektóre javascriptfunkcje znajdujące się na htmlstronie działającej w pliku android webview. Całkiem proste, co kod próbuje zrobić poniżej - z aplikacji na Androida wywołaj javascriptfunkcję z komunikatem testowym, który wywołuje z powrotem funkcję java w aplikacji na Androida, która wyświetla wiadomość testową za pośrednictwem toast.
Te javascriptspojrzenia działać jak:
function testEcho(message){
window.JSInterface.doEchoTest(message);
}
Z WebView próbowałem wywołać javascriptnastępujące sposoby bez powodzenia:
myWebView.loadUrl("javascript:testEcho(Hello World!)");
mWebView.loadUrl("javascript:(function () { " + "testEcho(Hello World!);" + "})()");
I nie pozwalają javascriptnaWebView
myWebView.getSettings().setJavaScriptEnabled(true);
// register class containing methods to be exposed to JavaScript
myWebView.addJavascriptInterface(myJSInterface, "JSInterface");
I oto Javaklasa
public class JSInterface{
private WebView mAppView;
public JSInterface (WebView appView) {
this.mAppView = appView;
}
public void doEchoTest(String echo){
Toast toast = Toast.makeText(mAppView.getContext(), echo, Toast.LENGTH_SHORT);
toast.show();
}
}
Spędziłem dużo czasu, szukając w Google, co robię źle. Wszystkie znalezione przykłady wykorzystują to podejście. Czy ktoś widzi tutaj coś nie tak?
Edycja: istnieje kilka innych javascriptplików zewnętrznych , do których się odwołuje i które są używane w html, czy to może być problem?
@JavascriptInterfacedekoratora w metodach Java, które chcesz udostępnić WebView poprzez interfejs JavaScript.
myWebView.loadUrl("javascript:testEcho('Hello World!')");rozumiem, że już załączyłeś plik HTML do tego widoku. Czy możesz mi powiedzieć, jak to zrobiłeś?