【问题标题】:Download file generated by javascript in android webview在android webview中下载由javascript生成的文件
【发布时间】:2017-01-11 22:50:23
【问题描述】:

我有一个带有 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 应用上运行,因此在 JavaScript 中将 blob 发送到 android 应用将无法在浏览器上运行。

【问题讨论】:

  • 也许这个问题/答案会有所帮助。 stackoverflow.com/questions/33434532/…
  • @bobjoe 谢谢你的回答,但是已经解决了。我忘记了这个问题,但我会回答我的解决方案。

标签: javascript android android-webview


【解决方案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
    }
}

【讨论】:

  • IOS呢??
  • @Jacksonmj 该应用不是为 iOS 编写的
猜你喜欢
  • 2018-05-14
  • 2016-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-04
  • 1970-01-01
  • 2014-08-13
  • 1970-01-01
相关资源
最近更新 更多