studio - Android WebView loadUrl JavaScript non funziona API<=18(ma funziona in API>=19)





example app (3)


SOLUZIONE

Ho trovato il problema che era che il parametro del messaggio (codificato) inviato nella funzione JavaScript aveva un'interruzione di riga [ \ n ] al suo interno. Rimuovendo quello usando la funzione split msg.split ("\ n"); ha funzionato

DOMANDA:
Cosa devo fare per far funzionare webView.loadUrl (javaScript) in API 18 o inferiore (rispetto all'API 19 o successiva)?

DESCRIZIONE DEL PROBLEMA:
Sto usando WebView per fare una chat.

  1. Per prima cosa caricherò l'HTML in questo modo: webView.loadUrl (url);
  2. Quindi uso di nuovo loadUrl per inviare il messaggio di chat in questo modo: webView.loadUrl (javaScript);

Funziona perfettamente con API> = 19, ma non funziona con API <= 18.

I messaggi di chat vengono comunque ricevuti da altri dispositivi ma gli altri dispositivi non ricevono un singolo messaggio dal dispositivo con API 18 o inferiore. Lo stesso identico codice è usato.

Ho cercato molto e continuerò a cercare. Se hai la risposta, qualsiasi idea che potrei testare o che potrebbe reindirizzare a informazioni pertinenti, ti preghiamo di condividerla. Grazie in anticipo.

MODIFICARE:
Il tag JavaScript nella stringa è impostato in minuscolo (con lo stesso problema): webView.loadUrl ("javascript:" + javaScriptFunction);




Non posso essere sicuro che questo sia ciò che sta causando il tuo problema, ma prova a usarlo

webView.loadUrl("javascript:" + theJavaScriptCode);

con "javascript:" minuscolo.

L'API 19+ non si preoccupa del caso del protocollo JavaScript in loadUrl (sebbene sia possibile utilizzare evaluateJavascript() ogni caso nell'API 19+), ma API 18 e giù non lo riconosce a meno che non sia scritto in minuscolo.




Aggiornamento: questo metodo è consigliato solo se non è possibile utilizzare ECMAScript 2015 (precedentemente noto come ES6). Se puoi usarlo, altre risposte qui forniscono implementazioni molto più ordinate.

Questo elenco risolverà il problema, eliminando anche tutte le occorrenze dell'argomento anziché solo 1 (o un valore specificato).

Array.prototype.destroy = function(obj){
    // Return null if no objects were found and removed
    var destroyed = null;

    for(var i = 0; i < this.length; i++){

        // Use while-loop to find adjacent equal objects
        while(this[i] === obj){

            // Remove this[i] and store it within destroyed
            destroyed = this.splice(i, 1)[0];
        }
    }

    return destroyed;
}

Uso:

var x = [1, 2, 3, 3, true, false, undefined, false];

x.destroy(3);         // => 3
x.destroy(false);     // => false
x;                    // => [1, 2, true, undefined]

x.destroy(true);      // => true
x.destroy(undefined); // => undefined
x;                    // => [1, 2]

x.destroy(3);         // => null
x;                    // => [1, 2]




javascript android webview