Phonegap / Cordova InAppbrowser文件下载问题

时间:2014-12-26 03:30:55

标签: javascript cordova download cross-platform

我正在使用PhoneGap / Cordova开发移动应用程序 我使用InAppBrowser来显示一个外部网站,使用" window.open"科尔多瓦的方法。

外部网站显示一些文件列表和下载链接。当我点击下载超链接时,它在所有浏览器中都能正常工作。

但是当我在Cordova Mobile应用程序中从InAppBrowser调用该外部网站时,该页面中的下载链接无效。

当我们使用InAppBrowsers时,我们无法使用Cordova API。我怎样才能克服这个问题?

更新:

我已经在ASP.Net中开发了一个响应式网站。本网站的一个功能是将文件作为字节保存到SQL服务器,并在需要时下载为文件。

我有一个GridView控件来显示要下载的文件和选项列表。 当您单击要下载的文件时,服务器端代码将从SQL Server创建文件并使用HTTP响应附加它。

C#代码:

        Response.Clear();
        Response.Buffer = true;
        Response.Charset = "";
        Response.Cache.SetCacheability(HttpCacheability.NoCache);
        Response.ContentType = contentType;
        Response.AppendHeader("Content-Disposition", "attachment; filename=" + fileName);
        Response.BinaryWrite(bytes);
        Response.Flush();
        Response.End();

当您在桌面浏览器中运行此Web应用程序时,它将按预期工作。将下载文件。

我已将此网站包装在Phonegap / Cordova Mobile应用程序中。

使用Javascript:

window.open(encodeURI("http://example.com/Files.aspx"), '_blank', 'location=no');

该网站将在InAppBrowser上运行。它无法处理下载文件http响应。

我们可以通过修改android / IOS本机代码来解决这个问题。 我无法访问android / IOS代码。因为我使用IntelXDK在云中构建android / IOS应用程序。

以下提供整体问题。 在Cordova InAppBrowser中,如何处理包含文件内容类型的Http响应?

1 个答案:

答案 0 :(得分:1)

InAppBrowser不允许下载。您需要修改插件才能下载。

对于android,在platforms\android\src\org\apache\cordova\inappbrowser

方法名称private void navigate(String url) {

包括

this.inAppWebView.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));
                      cordova.getActivity().startActivity(i);
                    }
                });

在此行之前this.inAppWebView.requestFocus();

方法public void run() {

中的相同代码

此段之后

if (clearAllCache) {
                CookieManager.getInstance().removeAllCookie();
            } else if (clearSessionCache) {
                CookieManager.getInstance().removeSessionCookie();
            }

            inAppWebView.loadUrl(url);

在onCreate

中的.java文件中
appView.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);
                    }
                });

不了解iOS