2012-04-09 17 views
0

definiert ist, ich bin eine HTML/JS-Anwendung zu schreiben, die auf Android unter einem WebView läuft. Unter bestimmten Umständen kann die Seite, die die Anwendung enthält, möglicherweise nicht geladen werden oder stattdessen eine andere Seite (z. B. 404-Seite oder ähnliches). Im Allgemeinen muss ich einen Satz von JS-Funktionen auf der Anwendungsseite ausführen oder einen anderen Satz von Aktionen ausführen, falls die Anwendungsseite nicht geladen wurde.Android WebView - erkennen, ob eine JS-Funktion

Ich versuche zu erkennen, ob die richtige Seite geladen wurde, indem Sie feststellen, ob die entsprechende JS verfügbar ist, aber ich finde keine Möglichkeit, es synchron zu tun - nur durch Aufrufen einer JS-Funktion und erwarten einen Rückruf über JavasctiptInterface. Während diese Methode machbar ist, frage ich mich, ob es einen besseren, eleganteren und zuverlässigeren Weg gibt, dies zu erreichen.

Ich kann sicherlich tun dies nicht durch die URL der Seite zu analysieren - es könnte die richtige sein, aber mit einem falschen Inhalt.

Irgendwelche Ideen?

+0

Warum halten Sie Rückruf nicht „elegant und zuverlässig“ sein? – kirilloid

+0

Weil ich von einer Entwicklungsplattform erwarten Schnittstelle der direkten Kommunikation zur Verfügung zu stellen, anstatt Aufruf 'javascript: ...' Protokolls - das ist die Art von Dingen, die Sie 6-7 Jahre auf IE vor tun würden. Ich habe ehrlich erwartet, dass Android mehr direkte Tools zur Verfügung stellt, um etwas so Triviales wie das Aufrufen einer JS-Methode zu tun, aber bisher hatte ich Pech bei meiner Suche, aber ich dachte, dass ich vielleicht an den falschen Stellen suche - daher die Frage. –

+0

Der Aufruf von "javascript: ..." sieht wirklich hacky aus, aber es sieht nicht wie ein Rückruf aus. Und warum ist es nicht zuverlässig? – kirilloid

Antwort

0

Ich glaube, Sie können es tun, schauen Sie bitte auf PhoneGap Projekt, werden Sie Ihre Antwort finden.

PhoneGap ist ein wunderbarer kostenloser Rahmen für die mobile Plattform.

+0

PhoneGap ist eine hervorragende Plattform, keine Frage. Leider ist die HTML-Anwendung in meinem Fall bereits entwickelt und kaum anfassbar. In jedem Fall ist die JS-zu-Native-Kommunikation hier nicht das Problem, es ist das Native-zu-JS, ohne '.loadUrl ('javascript: ...)' zu benutzen, das mich stört. –

0
@JavascriptInterface 
public void onLoaded(String result) { 
    if (result.equals("function")) { 
     // defined 
    } else { 
     // not defined 
    } 
} 

private void checkJSFunction() { 
    loadUrl("javascript:yourJSInterfaceName.onLoaded(typeof yourFunctionName)"); 
} 

Update: Dieser Code prüft die Funktion JS durch "typeof" definieren und das Rück ihr Ergebnis durch Javascript-Schnittstelle Java "onLoaded".

+0

Bitte erläutern Sie, was dieser Code macht und wie er die Frage beantwortet. Darüber hinaus enthält es einen Syntaxfehler. – idmean

+0

@idmean ok, ich habe aktualisiert – superuser

+0

Oh, scheint es bereits in den Kommentaren der Post beantwortet. – superuser

Verwandte Themen