在android webview中下载由javascript生成的文件

时间:2017-01-04 12:54:43

标签: javascript android android-webview

我有一个带有webview的Android应用程序。

每当用户点击按钮时,JavaScript都会创建一个blob,将文本放入其中并下载。

这是执行此操作的功能:

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

它可以在任何浏览器中正常工作,但当我尝试在应用程序中下载它时,没有任何反应。

有没有办法在应用程序中下载blob,还是更容易更改JavaScript?

我需要JavaScript才能在浏览器以及Android应用程序上运行,因此将blob发送到JavaScript中的Android应用程序将无法在浏览器上运行。

1 个答案:

答案 0 :(得分:1)

我找到的解决方案是检测javascript是在Android应用程序或浏览器中运行的(通过向用户代理添加字符串)。

在Android应用中,我发送变量textToWrite(通常会进入blob)到java。

在javascript中:

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

在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
    }
}