Cordova file-transfer 插件:无法插入请求 headers Android
Cordova file-transfer plugin: cannot insert request headers Android
我正在使用 cordova file-transfer 插件版本 1.3.0 从我的 android 设备上的 Web Api 服务器下载文件;
我正在尝试发送 headers(即接受和一些自定义 headers),但是如果
我用嗅探器(比如 wireshark)检查服务器上的请求,我的
headers 不在。
我正在使用 phonegap build (cli 5.2.2) 来构建 apk;
我的设备是三星 GT-S7500(Android 2.3.6 姜饼);
在 config.xml 中,我设置了白名单并包含插件(我尝试了指定版本号 (1.3.0) 和不指定版本号);
这是我的代码(在 DeviceReady 事件处理程序中调用)
var fileTransfer = new FileTransfer();
fileTransfer.download(attachUri, fileURL,
function (entry) {
debug.log("ERROR","download complete: " + entry.toURL());
window.open(entry.toNativeURL(), '_blank', 'location=no,closebuttoncaption=Close,enableViewportScale=yes');
},
function (error) {
alert("Error:" + error);
debug.log("ERROR",error);
}),
false,
{
headers:{
"Accept":"application/octet-stream",
"Authorization": "Basic dGVzdHVzZXJuYW1lOnRlc3RwYXNzd29yZA=="
}
};
这是网络 api 服务器收到的 headers
Connection: Keep-Alive
Accept-Encoding: gzip
Host: 192.168.0.10
User-Agent: Dalvik/1.4.0
User-Agent: (Linux; U; Android 2.3.6; GT-S7500 Build/GINGERBREAD)
在 Github 版本 1.3.0 上似乎修复了一个与此类似的错误。但它对我不起作用。
有什么帮助吗?
编辑:这是我的 config.xml
<?xml version='1.0' encoding='utf-8'?>
<widget id="com.phonegap.AsxMobApp" version="1.0.0" xmlns="http://www.w3.org/ns/widgets" xmlns:gap="http://phonegap.com/ns/1.0">
<name>AsxMobApp</name>
<description>
AsxMobApp
</description>
<author>
AsxMobApp Team
</author>
<content src="index.html" />
<preference name="permissions" value="none" />
<preference name="orientation" value="default" />
<preference name="target-device" value="universal" />
<preference name="fullscreen" value="true" />
<preference name="webviewbounce" value="true" />
<preference name="prerendered-icon" value="true" />
<preference name="stay-in-webview" value="false" />
<preference name="ios-statusbarstyle" value="black-opaque" />
<preference name="detect-data-types" value="true" />
<preference name="exit-on-suspend" value="false" />
<preference name="show-splash-screen-spinner" value="true" />
<preference name="auto-hide-splash-screen" value="true" />
<preference name="disable-cursor" value="false" />
<preference name="android-minSdkVersion" value="10" />
<preference name="android-installLocation" value="auto" />
<preference name="AndroidPersistentFileLocation" value="Internal" />
<gap:plugin name="org.apache.cordova.battery-status" source="npm" />
<gap:plugin name="org.apache.cordova.camera" source="pgb" version="0.3.6" />
<gap:plugin name="org.apache.cordova.media-capture" source="npm" />
<gap:plugin name="org.apache.cordova.console" source="npm" />
<gap:plugin name="org.apache.cordova.contacts" source="npm" />
<gap:plugin name="org.apache.cordova.device" source="npm" />
<gap:plugin name="org.apache.cordova.device-motion" source="npm" />
<gap:plugin name="org.apache.cordova.device-orientation" source="npm" />
<gap:plugin name="org.apache.cordova.dialogs" source="npm" />
<gap:plugin name="org.apache.cordova.geolocation" source="npm" />
<gap:plugin name="org.apache.cordova.globalization" source="npm" />
<gap:plugin name="org.apache.cordova.inappbrowser" source="npm" />
<gap:plugin name="org.apache.cordova.media" source="npm" />
<gap:plugin name="org.apache.cordova.network-information" source="npm" version="0.2.3" />
<gap:plugin name="org.apache.cordova.splashscreen" source="npm" />
<gap:plugin name="org.apache.cordova.vibration" source="npm" />
<gap:plugin name="cordova-plugin-file" />
<!-- file-transfer: questo plugin permette di scaricare in locale dei file da specifici url -->
<gap:plugin name="cordova-plugin-file-transfer" source="npm" />
<!-- whitelist: questo plugin permette di configurare i domini a cui l'applicazione può accedere via http, https ecc.
serve per far funzionare il plugin filetransfer che permette di scaricare in locale dei file da un determinato url (nel nostro caso gli allegati di una mail) -->
<gap:plugin name="cordova-plugin-whitelist" version="1.0.0" source = "npm"/>
<icon src="icon.png" />
<icon gap:platform="android" gap:qualifier="ldpi" src="www/res/icon/android/icon-36-ldpi.png" />
<icon gap:platform="android" gap:qualifier="mdpi" src="www/res/icon/android/icon-48-mdpi.png" />
<icon gap:platform="android" gap:qualifier="hdpi" src="www/res/icon/android/icon-72-hdpi.png" />
<icon gap:platform="android" gap:qualifier="xhdpi" src="www/res/icon/android/icon-96-xhdpi.png" />
<icon gap:platform="blackberry" src="www/res/icon/blackberry/icon-80.png" />
<icon gap:platform="blackberry" gap:state="hover" src="www/res/icon/blackberry/icon-80.png" />
<icon gap:platform="ios" height="57" src="www/res/icon/ios/icon-57.png" width="57" />
<icon gap:platform="ios" height="72" src="www/res/icon/ios/icon-72.png" width="72" />
<icon gap:platform="ios" height="114" src="www/res/icon/ios/icon-57-2x.png" width="114" />
<icon gap:platform="ios" height="144" src="www/res/icon/ios/icon-72-2x.png" width="144" />
<icon gap:platform="webos" src="www/res/icon/webos/icon-64.png" />
<icon gap:platform="winphone" src="www/res/icon/windows-phone/icon-48.png" />
<icon gap:platform="winphone" gap:role="background" src="www/res/icon/windows-phone/icon-173-tile.png" />
<gap:splash gap:platform="android" gap:qualifier="port-ldpi" src="www/res/screen/android/screen-ldpi-portrait.png" />
<gap:splash gap:platform="android" gap:qualifier="port-mdpi" src="www/res/screen/android/screen-mdpi-portrait.png" />
<gap:splash gap:platform="android" gap:qualifier="port-hdpi" src="www/res/screen/android/screen-hdpi-portrait.png" />
<gap:splash gap:platform="android" gap:qualifier="port-xhdpi" src="www/res/screen/android/screen-xhdpi-portrait.png" />
<gap:splash gap:platform="blackberry" src="www/res/screen/blackberry/screen-225.png" />
<gap:splash gap:platform="ios" height="480" src="www/res/screen/ios/screen-iphone-portrait.png" width="320" />
<gap:splash gap:platform="ios" height="960" src="www/res/screen/ios/screen-iphone-portrait-2x.png" width="640" />
<gap:splash gap:platform="ios" height="1136" src="www/res/screen/ios/screen-iphone-portrait-568h-2x.png" width="640" />
<gap:splash gap:platform="ios" height="1024" src="www/res/screen/ios/screen-ipad-portrait.png" width="768" />
<gap:splash gap:platform="ios" height="768" src="www/res/screen/ios/screen-ipad-landscape.png" width="1024" />
<gap:splash gap:platform="winphone" src="www/res/screen/windows-phone/screen-portrait.jpg" />
<!-- allow-navigation questa configurazione dice al plugin whitelist che tutti i domini possono essere contattati; in questo modo si riesce a far funzionare il plugin filetransfer che permette di scaricare in locale un file da un URL (nel nostro caso per il download in locale degli allegati -->
<allow-navigation href="*" />
<allow-intent href="*" />
<access origin="*" /> <!-- Required for iOS9 -->
<allow-intent href="tel:*" />
<allow-intent href="sms:*" />
<allow-intent href="mailto:*" />
<allow-intent href="geo:*" />
<platform name="android">
<allow-intent href="market:*" />
</platform>
<platform name="ios">
<allow-intent href="itms:*" />
<allow-intent href="itms-apps:*" />
</platform>
<engine name="android" spec="~4.1.1" />
</widget>
@elena,
从 Cordova 5.0.0 开始,您需要使用 whitelist
系统。
whitelist system
有 5 个部分,即使是经验丰富的开发人员也很难理解。
您需要在 1) config.xml
中添加一个部分,并在 2) index.html
.
中添加一行
1) 添加到您的 config.xml
<allow-navigation href="*" />
<allow-intent href="*" />
<access origin="*" /> <!-- Required for iOS9 -->
2) 添加到您的 index.html
<meta http-equiv="Content-Security-Policy"
content="default-src *;
style-src 'self' 'unsafe-inline' 'unsafe-eval';
script-src 'self' 'unsafe-inline' 'unsafe-eval';">
注意:您的应用现在不安全。
您可以自行决定保护您的应用程序。
请参阅下面的 link 以帮助您保护您的应用程序。
HOW TO apply the Cordova/Phonegap the whitelist system
祝你好运
好的。
我已经删除了图标、启动画面、一些首选项等。这些东西你可以放回去。
- 我已将您的编译器版本设置为
cli-5.2.0
。
- 我已将您的 android-minSdkVersion 设置为
14
。这是因为您正在使用姜饼。编译器应设置为该值,但我想确保您的设备正常工作。
- 我添加了一些插件;那些你有版本的。
- 我只包含了
file-transfer
; file-transfer
安装它需要的 file
版本。 (file
在评论中,以防万一。)如果你有问题,我会再等 1/2 小时。
- 我已经安装了
whitelist
插件;确保在 index.html
. 中输入 CSP
请阅读最近 60 天的 Phonegap Build blog,并期待在接下来的 30 天内有更多变化。
阅读粗体行
Top Mistakes by Developers new to Cordova/Phonegap
请注意您的应用现在不安全。保护您的应用程序取决于您。
HOW TO apply the Cordova/Phonegap the whitelist system
<?xml version='1.0' encoding='utf-8'?>
<widget id="com.phonegap.AsxMobApp"
version="1.0.0"
xmlns="http://www.w3.org/ns/widgets"
xmlns:gap="http://phonegap.com/ns/1.0">
<name>AsxMobApp</name>
<description>AsxMobApp</description>
<author>AsxMobApp Team</author>
<preference name="phonegap-version" value="cli-5.2.0" />
<preference name="android-minSdkVersion" value="14" />
<plugin name="cordova-plugin-camera" source="npm" spec="1.2.0" />
<plugin name="cordova-plugin-network-information" source="npm" spec="1.0.1" />
<!-- <plugin name="cordova-plugin-file" source="npm" spec="2.1.0" /> -->
<!-- file-transfer: questo plugin permette di scaricare in locale dei file da specifici url -->
<plugin name="cordova-plugin-file-transfer" source="npm" spec="1.2.0" />
<!-- whitelist: questo plugin permette di configurare i domini a cui l'applicazione può accedere via http, https ecc.
serve per far funzionare il plugin filetransfer che permette di scaricare in locale dei file da un determinato url (nel nostro caso gli allegati di una mail) -->
<plugin name="cordova-plugin-whitelist" source="npm" spec="1.1.0" />
<!-- allow-navigation questa configurazione dice al plugin whitelist che tutti i domini possono essere contattati; in questo modo si riesce a far funzionare il plugin filetransfer che permette di scaricare in locale un file da un URL (nel nostro caso per il download in locale degli allegati -->
<allow-navigation href="*" />
<allow-intent href="*" />
<access origin="*" /> <!-- Required for iOS9 -->
</widget>
请注意您的应用现在不安全。保护您的应用程序取决于您。
我正在使用 cordova file-transfer 插件版本 1.3.0 从我的 android 设备上的 Web Api 服务器下载文件; 我正在尝试发送 headers(即接受和一些自定义 headers),但是如果 我用嗅探器(比如 wireshark)检查服务器上的请求,我的 headers 不在。
我正在使用 phonegap build (cli 5.2.2) 来构建 apk; 我的设备是三星 GT-S7500(Android 2.3.6 姜饼); 在 config.xml 中,我设置了白名单并包含插件(我尝试了指定版本号 (1.3.0) 和不指定版本号);
这是我的代码(在 DeviceReady 事件处理程序中调用)
var fileTransfer = new FileTransfer();
fileTransfer.download(attachUri, fileURL,
function (entry) {
debug.log("ERROR","download complete: " + entry.toURL());
window.open(entry.toNativeURL(), '_blank', 'location=no,closebuttoncaption=Close,enableViewportScale=yes');
},
function (error) {
alert("Error:" + error);
debug.log("ERROR",error);
}),
false,
{
headers:{
"Accept":"application/octet-stream",
"Authorization": "Basic dGVzdHVzZXJuYW1lOnRlc3RwYXNzd29yZA=="
}
};
这是网络 api 服务器收到的 headers
Connection: Keep-Alive
Accept-Encoding: gzip
Host: 192.168.0.10
User-Agent: Dalvik/1.4.0
User-Agent: (Linux; U; Android 2.3.6; GT-S7500 Build/GINGERBREAD)
在 Github 版本 1.3.0 上似乎修复了一个与此类似的错误。但它对我不起作用。
有什么帮助吗?
编辑:这是我的 config.xml
<?xml version='1.0' encoding='utf-8'?>
<widget id="com.phonegap.AsxMobApp" version="1.0.0" xmlns="http://www.w3.org/ns/widgets" xmlns:gap="http://phonegap.com/ns/1.0">
<name>AsxMobApp</name>
<description>
AsxMobApp
</description>
<author>
AsxMobApp Team
</author>
<content src="index.html" />
<preference name="permissions" value="none" />
<preference name="orientation" value="default" />
<preference name="target-device" value="universal" />
<preference name="fullscreen" value="true" />
<preference name="webviewbounce" value="true" />
<preference name="prerendered-icon" value="true" />
<preference name="stay-in-webview" value="false" />
<preference name="ios-statusbarstyle" value="black-opaque" />
<preference name="detect-data-types" value="true" />
<preference name="exit-on-suspend" value="false" />
<preference name="show-splash-screen-spinner" value="true" />
<preference name="auto-hide-splash-screen" value="true" />
<preference name="disable-cursor" value="false" />
<preference name="android-minSdkVersion" value="10" />
<preference name="android-installLocation" value="auto" />
<preference name="AndroidPersistentFileLocation" value="Internal" />
<gap:plugin name="org.apache.cordova.battery-status" source="npm" />
<gap:plugin name="org.apache.cordova.camera" source="pgb" version="0.3.6" />
<gap:plugin name="org.apache.cordova.media-capture" source="npm" />
<gap:plugin name="org.apache.cordova.console" source="npm" />
<gap:plugin name="org.apache.cordova.contacts" source="npm" />
<gap:plugin name="org.apache.cordova.device" source="npm" />
<gap:plugin name="org.apache.cordova.device-motion" source="npm" />
<gap:plugin name="org.apache.cordova.device-orientation" source="npm" />
<gap:plugin name="org.apache.cordova.dialogs" source="npm" />
<gap:plugin name="org.apache.cordova.geolocation" source="npm" />
<gap:plugin name="org.apache.cordova.globalization" source="npm" />
<gap:plugin name="org.apache.cordova.inappbrowser" source="npm" />
<gap:plugin name="org.apache.cordova.media" source="npm" />
<gap:plugin name="org.apache.cordova.network-information" source="npm" version="0.2.3" />
<gap:plugin name="org.apache.cordova.splashscreen" source="npm" />
<gap:plugin name="org.apache.cordova.vibration" source="npm" />
<gap:plugin name="cordova-plugin-file" />
<!-- file-transfer: questo plugin permette di scaricare in locale dei file da specifici url -->
<gap:plugin name="cordova-plugin-file-transfer" source="npm" />
<!-- whitelist: questo plugin permette di configurare i domini a cui l'applicazione può accedere via http, https ecc.
serve per far funzionare il plugin filetransfer che permette di scaricare in locale dei file da un determinato url (nel nostro caso gli allegati di una mail) -->
<gap:plugin name="cordova-plugin-whitelist" version="1.0.0" source = "npm"/>
<icon src="icon.png" />
<icon gap:platform="android" gap:qualifier="ldpi" src="www/res/icon/android/icon-36-ldpi.png" />
<icon gap:platform="android" gap:qualifier="mdpi" src="www/res/icon/android/icon-48-mdpi.png" />
<icon gap:platform="android" gap:qualifier="hdpi" src="www/res/icon/android/icon-72-hdpi.png" />
<icon gap:platform="android" gap:qualifier="xhdpi" src="www/res/icon/android/icon-96-xhdpi.png" />
<icon gap:platform="blackberry" src="www/res/icon/blackberry/icon-80.png" />
<icon gap:platform="blackberry" gap:state="hover" src="www/res/icon/blackberry/icon-80.png" />
<icon gap:platform="ios" height="57" src="www/res/icon/ios/icon-57.png" width="57" />
<icon gap:platform="ios" height="72" src="www/res/icon/ios/icon-72.png" width="72" />
<icon gap:platform="ios" height="114" src="www/res/icon/ios/icon-57-2x.png" width="114" />
<icon gap:platform="ios" height="144" src="www/res/icon/ios/icon-72-2x.png" width="144" />
<icon gap:platform="webos" src="www/res/icon/webos/icon-64.png" />
<icon gap:platform="winphone" src="www/res/icon/windows-phone/icon-48.png" />
<icon gap:platform="winphone" gap:role="background" src="www/res/icon/windows-phone/icon-173-tile.png" />
<gap:splash gap:platform="android" gap:qualifier="port-ldpi" src="www/res/screen/android/screen-ldpi-portrait.png" />
<gap:splash gap:platform="android" gap:qualifier="port-mdpi" src="www/res/screen/android/screen-mdpi-portrait.png" />
<gap:splash gap:platform="android" gap:qualifier="port-hdpi" src="www/res/screen/android/screen-hdpi-portrait.png" />
<gap:splash gap:platform="android" gap:qualifier="port-xhdpi" src="www/res/screen/android/screen-xhdpi-portrait.png" />
<gap:splash gap:platform="blackberry" src="www/res/screen/blackberry/screen-225.png" />
<gap:splash gap:platform="ios" height="480" src="www/res/screen/ios/screen-iphone-portrait.png" width="320" />
<gap:splash gap:platform="ios" height="960" src="www/res/screen/ios/screen-iphone-portrait-2x.png" width="640" />
<gap:splash gap:platform="ios" height="1136" src="www/res/screen/ios/screen-iphone-portrait-568h-2x.png" width="640" />
<gap:splash gap:platform="ios" height="1024" src="www/res/screen/ios/screen-ipad-portrait.png" width="768" />
<gap:splash gap:platform="ios" height="768" src="www/res/screen/ios/screen-ipad-landscape.png" width="1024" />
<gap:splash gap:platform="winphone" src="www/res/screen/windows-phone/screen-portrait.jpg" />
<!-- allow-navigation questa configurazione dice al plugin whitelist che tutti i domini possono essere contattati; in questo modo si riesce a far funzionare il plugin filetransfer che permette di scaricare in locale un file da un URL (nel nostro caso per il download in locale degli allegati -->
<allow-navigation href="*" />
<allow-intent href="*" />
<access origin="*" /> <!-- Required for iOS9 -->
<allow-intent href="tel:*" />
<allow-intent href="sms:*" />
<allow-intent href="mailto:*" />
<allow-intent href="geo:*" />
<platform name="android">
<allow-intent href="market:*" />
</platform>
<platform name="ios">
<allow-intent href="itms:*" />
<allow-intent href="itms-apps:*" />
</platform>
<engine name="android" spec="~4.1.1" />
</widget>
@elena,
从 Cordova 5.0.0 开始,您需要使用 whitelist
系统。
whitelist system
有 5 个部分,即使是经验丰富的开发人员也很难理解。
您需要在 1) config.xml
中添加一个部分,并在 2) index.html
.
1) 添加到您的 config.xml
<allow-navigation href="*" />
<allow-intent href="*" />
<access origin="*" /> <!-- Required for iOS9 -->
2) 添加到您的 index.html
<meta http-equiv="Content-Security-Policy"
content="default-src *;
style-src 'self' 'unsafe-inline' 'unsafe-eval';
script-src 'self' 'unsafe-inline' 'unsafe-eval';">
注意:您的应用现在不安全。
您可以自行决定保护您的应用程序。
请参阅下面的 link 以帮助您保护您的应用程序。
HOW TO apply the Cordova/Phonegap the whitelist system
祝你好运
好的。
我已经删除了图标、启动画面、一些首选项等。这些东西你可以放回去。
- 我已将您的编译器版本设置为
cli-5.2.0
。 - 我已将您的 android-minSdkVersion 设置为
14
。这是因为您正在使用姜饼。编译器应设置为该值,但我想确保您的设备正常工作。 - 我添加了一些插件;那些你有版本的。
- 我只包含了
file-transfer
;file-transfer
安装它需要的file
版本。 (file
在评论中,以防万一。)如果你有问题,我会再等 1/2 小时。 - 我已经安装了
whitelist
插件;确保在index.html
. 中输入
CSP
请阅读最近 60 天的 Phonegap Build blog,并期待在接下来的 30 天内有更多变化。
阅读粗体行 Top Mistakes by Developers new to Cordova/Phonegap
请注意您的应用现在不安全。保护您的应用程序取决于您。
HOW TO apply the Cordova/Phonegap the whitelist system
<?xml version='1.0' encoding='utf-8'?>
<widget id="com.phonegap.AsxMobApp"
version="1.0.0"
xmlns="http://www.w3.org/ns/widgets"
xmlns:gap="http://phonegap.com/ns/1.0">
<name>AsxMobApp</name>
<description>AsxMobApp</description>
<author>AsxMobApp Team</author>
<preference name="phonegap-version" value="cli-5.2.0" />
<preference name="android-minSdkVersion" value="14" />
<plugin name="cordova-plugin-camera" source="npm" spec="1.2.0" />
<plugin name="cordova-plugin-network-information" source="npm" spec="1.0.1" />
<!-- <plugin name="cordova-plugin-file" source="npm" spec="2.1.0" /> -->
<!-- file-transfer: questo plugin permette di scaricare in locale dei file da specifici url -->
<plugin name="cordova-plugin-file-transfer" source="npm" spec="1.2.0" />
<!-- whitelist: questo plugin permette di configurare i domini a cui l'applicazione può accedere via http, https ecc.
serve per far funzionare il plugin filetransfer che permette di scaricare in locale dei file da un determinato url (nel nostro caso gli allegati di una mail) -->
<plugin name="cordova-plugin-whitelist" source="npm" spec="1.1.0" />
<!-- allow-navigation questa configurazione dice al plugin whitelist che tutti i domini possono essere contattati; in questo modo si riesce a far funzionare il plugin filetransfer che permette di scaricare in locale un file da un URL (nel nostro caso per il download in locale degli allegati -->
<allow-navigation href="*" />
<allow-intent href="*" />
<access origin="*" /> <!-- Required for iOS9 -->
</widget>