2017-01-04 1 views
2

私はwebviewでアンドロイドアプリを持っています。javascriptで生成されたファイルをアンドロイドwebview

ユーザーがボタンをクリックするたびに、JavaScriptはブロブを作成し、テキストを挿入してダウンロードします。ここで

はこれを行う関数です:

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

それはどのブラウザでも正常に動作しますが、私はアプリでそれをダウンロードしようとすると、何も起こりません。

アプリでブロブをダウンロードする方法はありますか、JavaScriptを変更する方が簡単ですか?

ブラウザでもAndroidアプリケーションでも動作するようにJavaScriptが必要なので、JavaScriptでAndroidアプリにBLOBを送信するとブラウザで動作しません。

+0

たぶん、この質問/回答が役立ちます。 http://stackoverflow.com/questions/33434532/android-webview-download-files-like-browsers-do – bobjoe

+1

@bobjoeあなたの答えをありがとう、それは解決されます。私はこの質問を忘れていましたが、私は私の答えに答えます。 – Laura

答えて

1

私が見つけた解決策は、Androidアプリケーションまたはブラウザ(ユーザーエージェントに文字列を追加すること)でjavascriptが動作していることを検出することでした。

Androidアプリでは、変数textToWrite(通常はBLOBに入る)をJavaに送信しています。 JavaScriptで

:Javaで

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

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 
    } 
} 
関連する問題