Download file generated by javascript in android webview

淺唱寂寞╮ 提交于 2021-01-04 03:08:19

问题


I have an android app with a webview.

Whenever a user clicks on a button, JavaScript creates a blob, puts text in it and downloads it.

Here's the function that does this:

function saveTextAsFile(A)
{
    FillTextToWrite(A);
    var textFileAsBlob = new Blob([textToWrite], {
        type: 'text/plain'
    });
    var downloadLink = document.createElement("a");
    downloadLink.download = "Analysis.txt";
    downloadLink.innerHTML = "Download File";
    if (window.webkitURL != null)
    {
        downloadLink.href = window.webkitURL.createObjectURL(textFileAsBlob);
    }
    else
    {
        downloadLink.href = window.URL.createObjectURL(textFileAsBlob);
        downloadLink.onclick = destroyClickedElement;
        downloadLink.style.display = "none";
        document.body.appendChild(downloadLink);
    }

    downloadLink.click();
}

It works fine in any browser, but when I try to download it in the app, nothing happens.

Is there a way to download the blob in the app or is it easier to change the JavaScript?

I need the JavaScript to work on browser as well as on the android app, so sending the blob to the android app in JavaScript will not work on browser.


回答1:


The solution I found was to detect wheter the javascript is running in Android app or in browser (by adding a string to the user agent).

When in Android app I am sending variable textToWrite (which would normally go into the blob) to the java.

In javascript:

if(App){
    Android.sendData(textToWrite);
} else {//make blob}

In java:

myWebView.addJavascriptInterface(new myJavascriptInterface(this), "Android");

public class myJavascriptInterface {
    Context mContext;

    myJavascriptInterface(Context c) {
        mContext = c;
    }

    @JavascriptInterface
    public void sendData(String data) {
        //save data as file
    }
}


来源:https://stackoverflow.com/questions/41464362/download-file-generated-by-javascript-in-android-webview

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!