2016-06-28 13 views
1

Ich versuche, ein base64 Bild Javascript zu senden, aber ich erhalte diesen Fehler in Android Studio:Android WebView base64 URL Javascript senden (Verweigern URL zu laden, wie es X Zeichen überschreitet.)

W/Chrom : [WARNUNG: navigator_impl.cc (280)] Weigert sich, die URL zu laden, da sie 2097152 Zeichen überschreitet.

Ich habe versucht, mit LoadDataWithBaseURL, aber ich kann nicht herausfinden, wie es tatsächlich Javascript ausführen, so dass ich nicht sicher bin, ob das eine Lösung ist.

Dies ist der Code ich benutze, funktioniert es für einige Bilder, aber einige sind zu groß, und es gibt mir, dass Fehler :(

Vielen Dank für jede Hilfe!

if (resultCode == RESULT_OK) 
{ 
    Uri selectedImage = intent.getData(); 
    myWebView.loadUrl("javascript:setFileUri('" + selectedImage.toString() + "')"); 
    String path = getRealPathFromURI(this, selectedImage); 
    //myWebView.loadUrl("javascript:setFilePath('" + path + "')"); 


    Bitmap bm = BitmapFactory.decodeFile(path); 
    ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
    bm.compress(Bitmap.CompressFormat.JPEG, 100, baos); //bm is the bitmap object 
    byte[] b = baos.toByteArray(); 

    String encodedImage = Base64.encodeToString(b, Base64.DEFAULT); 

    myWebView.loadUrl("javascript:setFilePath('" + encodedImage + "')"); 
} 

Antwort

2

Do not Ich weiß, ob Sie schon eine Antwort gefunden haben oder nicht, aber ich hatte den ganzen Tag mit dem gleichen Problem zu kämpfen, wie ich versucht habe, ein Bild an Javascript zu senden. Wie bei Ihnen gab mir loadUrl den '2097152' Fehler, also versuchte ich es mit evaluateJavascript Ich bekam immer Syntaxfehler in der Webview und nachdem ich damit herumgespielt hatte, schaffte ich es endlich so zu arbeiten:

ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); 
bitmap.compress(Bitmap.CompressFormat.PNG, 100, byteArrayOutputStream); 
byte[] byteArray = byteArrayOutputStream.toByteArray(); 
String encoded = Base64.encodeToString(byteArray, Base64.DEFAULT); 

try { 
    final String retFunction = "imageReturnFunction('data:image/png;base64," + URLEncoder.encode(encoded, "UTF-8") + "');"; 

    runOnUiThread(new Runnable() { 
     public void run() { 
      webView.evaluateJavascript(retFunction, null); 
     } 
    }); 
} catch(Exception ex) { 
    ex.printStackTrace(); 
} 

Beachten Sie, dass ich es in meinem Fall als dataURL formatieren musste (was in einer JS-App ziemlich üblich wäre), aber Sie können den Code bei Bedarf anpassen. Hoffe das hilft.

+0

Vielen Dank für das Teilen, ich bin nicht in der Lage, dies jetzt zu versuchen, aber wenn jemand sagt, es funktioniert/hilft, werde ich es als die richtige Antwort markieren. – Eric