Cordova InAppBrowser从JSP页面下载文件

时间:2016-06-02 08:59:29

标签: cordova android-webview inappbrowser

我有一个应用程序可以在InAppBrowser中打开外部网站。该网站使用的是Java Server Pages和Java Server Faces。我想检测用户何时想要下载文件并使用意图选择器提示他/下载文件/在Chrome中打开文件。

问题是当我点击文件时没有任何反应,我也尝试添加一个DownloadListener,但它从未被调用过。网址不包含任何扩展名,因此我无法通过它检测到,相反,所有请求都是通过POST向当前页面发出的,包含一些表单数据,并且响应包含标题:

Content-Disposition:attachment;filename=somefilename.xlsx
Content-Type:application/octet-stream
Transfer-Encoding:chunked
X-FRAME-OPTIONS:SAMEORIGIN
X-Powered-By:Servlet/3.0 JSP/2.2
X-Powered-By:JSF/2.0  

我找不到任何方法让这个工作。在iOS上,文件在新页面中打开,就像在浏览器中一样,但在Android上没有任何反应。

我必须使用InAppBrowser,因为该应用的角色是为现有网站提供应用,并且使用iframe不是解决方案,因为他们不允许跨源请求。

更新
这就是下载链接的样子:

<form id="j_idt181:0:j_idt196" name="j_idt181:0:j_idt196" method="post" action="/somepathhere/portal.xhtml" enctype="application/x-www-form-urlencoded">
<input type="hidden" name="j_idt181:0:j_idt196" value="j_idt181:0:j_idt196">
    <a href="#" onclick="something.jsfcljs(document.getElementById('j_idt181:0:j_idt196'),{'j_idt181:0:j_idt196:j_idt197':'j_idt181:0:j_idt196:j_idt197'},'');return false">
        <img src="/somepathhere/javax.faces.resource/excel.png.xhtml?ln=img" style="width:30px; height: 30px; " title="Download">
            Download
        </img>
        <input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState" value="-5463575505694988987:906233489912842961" autocomplete="off">
        </input>
    </a>
</input>

1 个答案:

答案 0 :(得分:0)

您无法通过InAppBrowser下载文件。我建议尝试使用像File Transfer Plugin这样的插件通过应用程序异步下载文件。我猜你正在使用的"actionListener"使用doesn't really work移动设备。