기존 Ajax 스타일 웹 응용 프로그램을 Chrome 패키지 응용 프로그램으로 사용할 수 있도록 노력하고 있습니다. Ajax 응용 프로그램은 패키지 된 응용 프로그램 내에서 Webview에서 실행되며 대부분 잘 작동합니다.크롬 패키지 응용 프로그램 - Webview에서 파일 다운로드
Ajax 앱을 사용하면 표준 HTML 5 업로드 및 드래그/드롭을 사용하여 문서를 업로드 할 수 있습니다. 업로드는 정상적으로 작동하지만 다운로드는 작동하지 않습니다..
이것은 Ajax 앱의 간단한 로직 샘플입니다. Javascript를 사용하여 click 이벤트를 처리하고 일부 논리를 수행 한 다음 숨겨진 IFrame의 위치를 설정하여 다운로드를 트리거합니다.
<html>
<head>
<script type="text/javascript">
function downloadFile(url) {
window.frames['dataTransfer'].location = url;
}
</script>
</head>
<body>
<a href="http://www.google.com" target="_blank">Google</a><br/>
<a href="https://s3.amazonaws.com/LYHKDevA1/2058e6cab4304af3a39eeb275eeac96d?response-content-disposition=attachment%3Bfilename%3D%22TestFile.pdf%22%3Bfilename*%3DUTF-8%27%27TestFile.pdf&Signature=FUlZZqNoJ%2F%2FvHIPX6CPDkvJ7uik%3D&Expires=1437854276&AWSAccessKeyId=1ZAN0NYFJ2DCQX8AN8G2" target="_blank">Download PDF</a><br/>
<a href="#" onclick="downloadFile('https://s3.amazonaws.com/LYHKDevA1/2058e6cab4304af3a39eeb275eeac96d?response-content-disposition=attachment%3Bfilename%3D%22TestFile.pdf%22%3Bfilename*%3DUTF-8%27%27TestFile.pdf&Signature=FUlZZqNoJ%2F%2FvHIPX6CPDkvJ7uik%3D&Expires=1437854276&AWSAccessKeyId=1ZAN0NYFJ2DCQX8AN8G2');return false;" target="_blank">Download PDF JS</a><br/>
<iframe name="dataTransfer" style="width: 0; height: 0; border: none;"></iframe><br/>
</body>
</html>
표준 Chrome 탭에서 실행하면 3 개의 링크 모두 정상적으로 작동합니다. 그러나 Chrome 앱에서는 첫 번째 링크 만 작동합니다. 세 번째 링크를 클릭해도 아무런 반응이 없습니다. 개발자 도구의 네트워크 섹션에서 실제로 다운로드가 시작된 것처럼 보이지만 빨리 취소됩니다.
Chrome 앱의 매니페스트는 웹 뷰 및 관련 도메인을 허용합니다.
{
"manifest_version": 2,
"name": "Test Download",
"version": "0.1.0",
"permissions": [
"webview",
"<DOMAIN OF THE SAMPLE PAGE ABOVE>",
"https://s3.amazonaws.com/"
],
"app": {
"background": {
"scripts": ["background.js"]
}
},
"icons": {},
"minimum_chrome_version": "28"
}
Chrome 앱에는 간단하게 newwindow
처리 기능이 있습니다.
window.onload = function() {
var webview = document.querySelector('#app-webview');
webview.src = '<URL TO SAMPLE PAGE ABOVE>';
webview.addEventListener('newwindow', function(e) {
e.preventDefault();
e.stopPropagation();
window.open(e.targetUrl);
});
};
(Ajax 앱을 크게 변경하지 않고도) 다운로드 작동 방법에 대한 제안 사항이 있으십니까?
https://chromiumcodereview.appspot.com/20803004/에 따르면이 API는 안정적으로 만들어져 Chrome 30에서 사용할 수 있습니다. –
그래, 아직 29 개가 아니지만 병합 대상입니다. –
@chomp 대단히 감사합니다. 당신의 예제에 대한 하나의 약간의 수정 - 당신은'e.allow()'대신'e.request.allow()'를 사용해야합니다. – tfasz