Android webview " Uncaught SyntaxError: jeton inattendu illégal"
dans mon programme android j'ai obtenu un webview et j'ai besoin de définir des valeurs aux éléments de webview (textareas, cases à cocher etc) dynamiquement. j'ai une méthode javascript qui reçoit les valeurs du programme et effectuer des opérations de chaîne et stocke les valeurs de l'élément correct. Mais j'obtiens toujours cette erreur... un peu coincé ici. Toute aide sera appréciée.
j'ai exécuté avec succès le script dans L'éditeur W3Schools TryIt, mais pas dans le programme!
final WebView webView = new WebView(getApplicationContext());
LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT, 1);
webView.setLayoutParams(params);
webView.setBackgroundColor(Color.LTGRAY);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setDomStorageEnabled(true);
webView.setWebChromeClient(new android.webkit.WebChromeClient());
webView.setWebViewClient(new WebChromeClient());
webView.loadData("<!DOCTYPE html><html><body>"+ questionsArray[questionIndex] +"</body></html>", "text/html", "UTF-8");
webView.addJavascriptInterface(javaScriptInterface, "HtmlViewer");
scrolRootLayout.addView(surveyWebView);
et ma méthode Javascript pour définir les valeurs des textareas dans le webView
function myFunction(var_)
{
var str = var_.replace("-!!!-","");
var pipeSplitedArray = str.split("||");
for(var i=0; i<pipeSplitedArray.length-1; i++) {
if(pipeSplitedArray[i].indexOf("-!@!-") == -1) {
var queArray = new Array();
queArray =pipeSplitedArray[i].split("-@!@-");
if(document.getElementsByName(queArray[0]))
document.getElementsByName(queArray[0]).item(0).innerHTML=queArray[1];
}
}
}
les valeurs sont transmises sur un chargement défini par un paquet..
private class WebChromeClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
public void onPageFinished(WebView view, String url) {
String script = "javascript:function myFunction(var_) { var pipeSplitedArray = var_.split("||"); for(var i=0; i<pipeSplitedArray.length-1; i++) { if(pipeSplitedArray[i].indexOf("-!@!-") == -1) { var queArray = new Array(); queArray =pipeSplitedArray[i].split("-@!@-"); if(document.getElementsByName(queArray[0])) document.getElementsByName(queArray[0]).item(0).innerHTML=queArray[1]; } } }";
view.loadUrl(script);
view.loadUrl("javascript:window.HtmlViewer.injectIntoWebView(myFunction("+answerString+"));");
}
}
le contenu HTML chargé dans le webView, questionsArray[questionIndex] est
<div class="newmain5 norma12" style="position:relative;width:320px;"> Enter your name :</div>
<div class="newmain6" style="position:relative;width:275px;left:10px;">
<textarea name="69_206" id="1" rows="5" cols="30" style="font-family:Arial, Helvetica, sans-serif; font-size:12px; color:#666666; width:260px; border:1px solid #CCCCCC; background-color:#EBEBEB;" />
</textarea>
</div>
String passed onpagefinished:
69_206-@!@-MyName||
L'erreur que je reçois tout le temps pendant l'exécution de mon application est
11-23 14:46:59.786: I/chromium(2763): [INFO:CONSOLE(1)] "Uncaught SyntaxError: Unexpected token ILLEGAL", source: (1)
j'ai essayé d'exécuter le script dans les écoles W3 Tryit Editor et le script est exécuté avec succès, mais jamais dans l'application android.. quel est mon erreur? Ce serait génial si vous pouvez les aider!!
Merci d'avance..
2 réponses
Trouvé l'Erreur. Vous devez mettre la valeur de chaîne de caractères entre guillemets en passant comme paramètre.
Mauvais
view.loadUrl("javascript:window.HtmlViewer.injectIntoWebView(myFunction("+answerString+"));");
Correct
view.loadUrl("javascript:window.HtmlViewer.injectIntoWebView(myFunction('"+answerString+"'));");
La valeur doit être entre guillemets, vérifier myFunction('69_206-@!@-MyName||')
Vérifiez votre fichier JavaScript
si vous avez la mauvaise syntaxe de l'opérateur relationnel dans la déclaration if.
modifier => to >= and =< to <=
$('#search').bind('keydown', function() {
tmp = Number(event.keyCode);
if ((tmp <= "48" && tmp >= "90") || (tmp <= "96" && tmp >= "111") || (tmp <= "186" && tmp >= "222")) {
showSearching();
}
});
Autres de vérifier ce code:
Si vous avez besoin pour vous assurer que la chaîne n'est pas juste un tas d'espaces vides (je suppose que c'est pour la validation de formulaire), vous devez faire un remplacement sur les espaces.
str.replace(/-!!!-/g,"")