我想导出一个用JS创建的csv文件,并让用户在手机上下载它。如何下载一个用JS创建的csv文件到你的android手机(webview)
这是我创建的文件JS代码:
var createACSVFile = function() {
var ArrayOfDataToExport = [];
for (var k = 0; k < localStorage.length; k++) {
console.log([localStorage.key(k),JSON.parse(localStorage.getItem(localStorage.key(k)))]);
ArrayOfDataToExport.push([localStorage.key(k),JSON.parse(localStorage.getItem(localStorage.key(k)))])
}
var csvRows = [];
for(var i=0, l=ArrayOfDataToExport.length; i<l; ++i){
csvRows.push(ArrayOfDataToExport[i].join(','));
}
var csvString = csvRows.join("%0A");
var a = document.createElement('a');
a.href = 'data:attachment/csv,' + csvString;
a.target = '_blank';
a.download = 'exportFile.csv';
document.body.appendChild(a);
a.click();
};
createACSVFile();
这是我的Android代码:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
view = (WebView) this.findViewById(R.id.webView);
view.getSettings().setJavaScriptEnabled(true);
view.getSettings().setAllowFileAccess(true);
view.getSettings().setDomStorageEnabled(true);
view.getSettings().setUseWideViewPort(true);
view.getSettings().setLoadWithOverviewMode(true);
view.setInitialScale(1);
view.getSettings().setJavaScriptEnabled(true);
view.getSettings().setSupportZoom(false);
view.setWebViewClient(new MyBrowser(){
@Override
public void onPageFinished(WebView view, String url) {
//hide loading image
findViewById(R.id.imageLoading1).setVisibility(View.GONE);
//show webview
findViewById(R.id.webView).setVisibility(View.VISIBLE);
}
});
view.loadUrl("file:///android_asset/www/index.html");
view.setWebChromeClient(new WebChromeClient(){
});
view.setDownloadListener(new DownloadListener() {
public void onDownloadStart(String url, String userAgent,
String contentDisposition, String mimetype,
long contentLength) {
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url));
startActivity(i);
}
});
}
我得到这个错误:
08-20 11:12:36.508 17111-17111/checker.coin.crypto.wingcrony.by.cryptocoinchecker E/AndroidRuntime: FATAL EXCEPTION: main Process: checker.coin.crypto.wingcrony.by.cryptocoinchecker, PID: 17111 android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=data:attachment/csv,Poloniex, currencyForToShow,usd howToOrder,Shortname passS,false whichExchangeYouUse,Bitfinex } at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1809) at android.app.Instrumentation.execStartActivity(Instrumentation.java:1523) at android.app.Activity.startActivityForResult(Activity.java:3981) at android.app.Activity.startActivityForResult(Activity.java:3933) at android.app.Activity.startActivity(Activity.java:4272) at android.app.Activity.startActivity(Activity.java:4240) at checker.coin.crypto.wingcrony.by.cryptocoinchecker.MainActivity$3.onDownloadStart(MainActivity.java:153) at com.android.webview.chromium.WebViewContentsClientAdapter.onDownloadStart(WebViewContentsClientAdapter.java:1195) at org.chromium.android_webview.AwContentsClientCallbackHelper$MyHandler.handleMessage(AwContentsClientCallbackHelper.java:126) at android.os.Handler.dispatchMessage(Handler.java:111) at android.os.Looper.loop(Looper.java:207) at android.app.ActivityThread.main(ActivityThread.java:5728) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:679)
更新
如果加入到我的AndroidManifest.xml中,我得到了同样的错误:
<uses-permission android:name="android.permission.ACCESS_DOWNLOAD_MANAGER"/>
你知道的PhoneGap /科尔多瓦,允许用于混合的应用程序,使用Javascript在网页视图之间桥梁Java的Android功能? –
是的,我知道存在。但我完全在android studio中创建了我的应用程序,因此无法更改为Cordova。 – Steven
我得到这个错误:找不到处理意图的活动{act = android.intent.action.VIEW我不知道如何解决这个问题 – Steven