Android - so laden Sie externe javascript-Dateien innerhalb von zur Laufzeit generierten HTML-Daten?

Ich habe eine WebView mit HTML-Daten. Die Daten werden zur Laufzeit generiert. Eines der wichtigsten Features von my app ist, wobei bestimmte Teile des HTML-Daten. Ich habe versucht, dies durch die Verwendung von javascript.

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.fragment_reader_page, container, false);

    webview = (WebView) rootView.findViewById(R.id.resultText);
    webview.getSettings().setJavaScriptEnabled(true);

    String page = makeHTML();
    webview.loadUrl("file:///android_asset/jquery-1.8.2.js");
    webview.loadUrl("file:///android_asset/src_javascript.js");
    webview.loadData(page, "text/html", "UTF-8");

    return rootView;
}

private String makeHTML() {
    StringBuilder sb = new StringBuilder();

    sb.append("<!DOCTYPE html>\n");
    sb.append("<html>\n");
    sb.append("<head>\n");
    sb.append("</head>\n");
    sb.append("<body>\n");
    sb.append(tokenizedText + "\n");
    sb.append("</body>\n");
    sb.append("</html>\n");

    return sb.toString();
}

tokenizedText ist meine zur Laufzeit generierte Daten mit diesem format:

<YT_SEN id="_YT_SEN_0">This is my first sentence.</YT_SEN>
<YT_SEN id="_YT_SEN_1">This is my second sentence.</YT_SEN>
...

Wenn meine Daten, die geladen wird in der Webansicht kann der Benutzer markieren Sie einen bestimmten Satz durch Angabe der Anzahl. Diese Methode ruft dann die entsprechende javascript-Funktion:

public void highlightSentence(int sent_id) {
    if (android.os.Build.VERSION.SDK_INT < 19) {
        webview.loadUrl("javascript:highlightSentence('_YT_SEN_" +sent_id+ "', " +color+ ")");
    } else {
        webview.evaluateJavascript("javascript:highlightSentence('_YT_SEN_" +sent_id+ "', " +color+ ")", null);
    }
}

Die javascript-Funktion für die Hervorhebung (definiert im inneren file:///android_asset/src_javascript.js):

function highlightSentence(object,color)
{
    document.getElementById(object).style.backgroundColor = color;
}

Die Ausgabe von Logcat, wenn ich ausführen, die highlightSentence Methode:

I/chromium [INFO:CONSOLE(1)] "Uncaught ReferenceError: highlightSentence is not defined", source:  (1)

Irgendwie die WebView nicht finden können, die highlightSentence Funktion. Ich denke, es ist wegen der Art, wie ich laden Sie die Javascript-und JQuery-Dateien. Doch ich weiß nicht (und kann nicht finden) die richtige Art und Weise zu laden externe js-Dateien innerhalb von zur Laufzeit generierten HTML-Daten.

Hinweis: ich benutze die WebView, die ausschließlich für die offline-Nutzung, ich habe keine Notwendigkeit für eine internet-Kommunikation zu löschen. WebView schien der einfachste Weg zu ermöglichen, die dynamische Hervorhebung.

InformationsquelleAutor Skywalker10 | 2015-01-08
Schreibe einen Kommentar