2017-01-04 4 views
2

У меня есть приложение для Android с веб-просмотром.Загрузить файл, созданный javascript в android webview

Всякий раз, когда пользователь нажимает кнопку, 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, поэтому отправка блога в приложение для Android в JavaScript не будет работать в браузере.

+0

Может быть, этот вопрос/ответ поможет. http://stackoverflow.com/questions/33434532/android-webview-download-files-like-browsers-do – bobjoe

+1

@bobjoe Спасибо за ваш ответ, но он решен. Я забыл об этом вопросе, но я отвечу на свое решение. – Laura

ответ

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

 Смежные вопросы

  • Нет связанных вопросов^_^