Android WebView 将 base64 url 发送到 Javascript(拒绝加载 URL,因为它超过了 X 个字符。)

Android WebView send base64 url to Javascript (Refusing to load URL as it exceeds X characters.)

我正在尝试将 base64 图像发送到 javascript,但我在 Android Studio 中一直收到此错误:

W/chromium:[警告:navigator_impl.cc(280)]拒绝加载 URL,因为它超过 2097152 个字符。

我试过使用 loadDataWithBaseURL,但我不知道如何真正做到 运行 任何 Javascript 所以我不确定这是否是一个解决方案。

这是我正在使用的代码,它适用于某些图像,但有些图像太大,它给了我错误:(

感谢您的帮助!

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 + "')");
}

不知道您是否找到了这个问题的答案,但我整天都在为同样的事情苦苦挣扎,试图将图像发送到 Javascript。与您一样,loadUrl 给了我“2097152”错误,所以我尝试使用 evaluateJavascript 但一直出现 webview 语法错误。在玩弄它之后,我终于让它像这样工作了:

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();
}

请注意,在我的例子中,我需要将其格式化为 dataURL(这在 JS 应用程序中很常见),但您可以根据需要调整代码。希望这有帮助。

基于 bastecklein 回答

val jsFunction = "$jsEntryPoint('data:image/jpeg;base64," +
                    base64String.replace("\n", "") 
                    +"');"`