我有一个我最近尝试转换为PhoneGap的网络应用程序,但出于某种原因,在我的Android上运行它时,它无法访问互联网。通过usb使用chrome进行调试时,我看到错误"无法加载资源:服务器响应状态为404(未找到)"对于所有外部请求(例如,在我的html中将谷歌字体作为样式表从fonts.googleapis.com
加载,并从我的js调用firebase)。
我使用默认的<access origin="*"/>
指令,根据我的理解,该指令应该允许完全访问。
我的完整config.xml
如下:
<widget xmlns="http://www.w3.org/ns/widgets" xmlns:gap="http://phonegap.com/ns/1.0" id="com.phonegap.helloworld" version="1.0.0">
<name>MyApp</name>
<description>MyDescription</description>
<author href="http://phonegap.com" email="support@phonegap.com">PhoneGap 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="14"/>
<preference name="android-installLocation" value="auto"/>
<gap:plugin name="org.apache.cordova.battery-status" source="npm"/>
<gap:plugin name="org.apache.cordova.camera" 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.file" source="npm"/>
<gap:plugin name="org.apache.cordova.file-transfer" 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.media-capture" source="npm"/>
<gap:plugin name="org.apache.cordova.network-information" source="npm"/>
<gap:plugin name="org.apache.cordova.splashscreen" source="npm"/>
<gap:plugin name="org.apache.cordova.vibration" source="npm"/>
<icon src="icon.png"/>
<icon src="www/res/icon/android/icon-36-ldpi.png" gap:platform="android" gap:qualifier="ldpi"/>
<icon src="www/res/icon/android/icon-48-mdpi.png" gap:platform="android" gap:qualifier="mdpi"/>
<icon src="www/res/icon/android/icon-72-hdpi.png" gap:platform="android" gap:qualifier="hdpi"/>
<icon src="www/res/icon/android/icon-96-xhdpi.png" gap:platform="android" gap:qualifier="xhdpi"/>
<icon src="www/res/icon/blackberry/icon-80.png" gap:platform="blackberry"/>
<icon src="www/res/icon/blackberry/icon-80.png" gap:platform="blackberry" gap:state="hover"/>
<icon src="www/res/icon/ios/icon-57.png" gap:platform="ios" width="57" height="57"/>
<icon src="www/res/icon/ios/icon-72.png" gap:platform="ios" width="72" height="72"/>
<icon src="www/res/icon/ios/icon-57-2x.png" gap:platform="ios" width="114" height="114"/>
<icon src="www/res/icon/ios/icon-72-2x.png" gap:platform="ios" width="144" height="144"/>
<icon src="www/res/icon/webos/icon-64.png" gap:platform="webos"/>
<icon src="www/res/icon/windows-phone/icon-48.png" gap:platform="winphone"/>
<icon src="www/res/icon/windows-phone/icon-173-tile.png" gap:platform="winphone" gap:role="background"/>
<gap:splash src="www/res/screen/android/screen-ldpi-portrait.png" gap:platform="android" gap:qualifier="port-ldpi"/>
<gap:splash src="www/res/screen/android/screen-mdpi-portrait.png" gap:platform="android" gap:qualifier="port-mdpi"/>
<gap:splash src="www/res/screen/android/screen-hdpi-portrait.png" gap:platform="android" gap:qualifier="port-hdpi"/>
<gap:splash src="www/res/screen/android/screen-xhdpi-portrait.png" gap:platform="android" gap:qualifier="port-xhdpi"/>
<gap:splash src="www/res/screen/blackberry/screen-225.png" gap:platform="blackberry"/>
<gap:splash src="www/res/screen/ios/screen-iphone-portrait.png" gap:platform="ios" width="320" height="480"/>
<gap:splash src="www/res/screen/ios/screen-iphone-portrait-2x.png" gap:platform="ios" width="640" height="960"/>
<gap:splash src="www/res/screen/ios/screen-iphone-portrait-568h-2x.png" gap:platform="ios" width="640" height="1136"/>
<gap:splash src="www/res/screen/ios/screen-ipad-portrait.png" gap:platform="ios" width="768" height="1024"/>
<gap:splash src="www/res/screen/ios/screen-ipad-landscape.png" gap:platform="ios" width="1024" height="768"/>
<gap:splash src="www/res/screen/windows-phone/screen-portrait.jpg" gap:platform="winphone"/>
<access origin="*"/>
<access uri="https://*.firebaseio.com" subdomains="true"/>
<plugin name="cordova-plugin-whitelist" version="1"/>
<allow-intent href="http://*/*"/>
<allow-intent href="https://*/*"/>
<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>
</widget>
我在这里查看看似相关的问题,他们提到问题可能与cordova-whitelist-plugin
有关,并且在我的html中添加Content-Security-Policy
元指令可能会有所帮助,但是我无法弄清楚如何做到这一点。
编辑: 以下是我得到的一些404。这些网址可以很好地从网络版开始。
http://fonts.googleapis.com/css?family=RobotoDraft:regular,bold,italic,thin,light,bolditalic,black,medium Failed to load resource: the server responded with a status of 404 (Not Found)
https://fonts.googleapis.com/css?family=Quicksand:300,400,700 Failed to load resource: the server responded with a status of 404 (Not Found)
http://fonts.googleapis.com/css?family=RobotoDraft:regular,bold,italic,thin,light,bolditalic,black,medium Failed to load resource: the server responded with a status of 404 (Not Found)
http://debug1.build.phonegap.com/target/target-script-min.js#15bded38-647a-11e5-95fa-22000b96d1a7 Failed to load resource: the server responded with a status of 404 (Not Found)
答案 0 :(得分:5)
@Talula, 可能是您没有为您的phonegap编译器设置版本。这是你需要知道的。
来自Top Mistakes by Developers new to Cordova/Phonegap你已经点击了:
来自 Phonegap Build 论坛,Petra Adds:
我想补充一点:没有公告,PGB将默认PGB版本从3.7.0更改为cli-5.2.0。这会导致所有未设置“手机版”版本的人在config.xml中遇到突然需要启动画面和白名单插件以及config和html中的额外白名单规范。
此外,几个插件似乎无法使用cli-5.2.0正确构建,导致日志文件错误消息关于&#34; Class ***。java&#34;。
对于#6&amp; #7
使用CLI版本,如果您没有为您的平台分配版本,或者在&#39;&#39; Phonegap Build&#39;&#39;如果你没有在config.xml中设置phonegap-version,你将获得最新版本。如果运气好,您的程序就会按预期运行。如果你不幸运,你会得到一组级联错误。
幸运的是,对于我们所有人来说,Holly Schinsky写了一篇很好的博文来解释这一切:
Cordova / PhoneGap版本混淆
http://devgirl.org/2014/11/07/cordovaphonegap-version-confusion/
#10
这个相对* NEW *的要求意味着什么?要访问网站上的任何网站或资源,您必须使用白名单和白名单插件。如果您使用cordova-android@4.0.0或更高版本,此要求将生效;包括cli-5.1.1。但是,如果您的版本在4.0.0之前,请使用3.5.0或3.7.0,那么不必须添加 white-list 要求。< / p>
要明确,&#34;白名单&#34;已经存在了一段时间,但插件和要求是非常新的。正如您所期望的那样,&#34;白名单&#34;添加了,defacto开放访问功能已被弃用。或者说另一种方式,事实上开放访问功能已被计划并计划被淘汰。此更改标志着删除开放访问功能的一个步骤。
此外,内容安全策略(CSP)已经吸引了众多开发人员 - 因为它的公开性很差。此CSP需要包含您使用的每个HTML页面,就像您必须等待“设备准备”一样。该文档隐藏在许多最新文档页面的底部。
相关链接
Phonegap Build Forum:Notes for upgrading to cli-5.1.1 on PGB,现在需要白名单
答案 1 :(得分:1)
对于那些在使用Phonegap 6.3.1时遇到此问题的人,您应该正确地将网址列入白名单并使用cordova-plugin-inappbrowser plugin。
继续阅读以了解如何执行此操作。
首先,确保您已将要打开的网址列入白名单。您可以将它们添加到项目根目录下config.xml文件中的<access>
标记,<allow-intent>
标记和allow-navigation
标记的href中。 您需要所有三个标签。类似以下内容:
<?xml version='1.0' encoding='utf-8'?>
<widget id="com.phonegap.helloworld" version="1.0.0"
xmlns="http://www.w3.org/ns/widgets"
xmlns:gap="http://phonegap.com/ns/1.0">
...
<access origin="*" />
<allow-intent href="*" />
<allow-navigation href="*" />
...
</widget>
(注意:&#34; *&#34;在上面的href中允许打开任何url / path。在生产中,你可能想限制到某些url / path)
接下来,在index.html文件中,添加以下javascript:
<script type="text/javascript">
document.addEventListener('deviceready', function() {
var url = 'https://www.google.com' // change to whatever you want
cordova.InAppBrowser.open(url, '_self', 'location=no');
}, false)
</script>
此脚本使用cordova-plugin-inappbrowser插件,如果您使用标准Phonegap模板生成应用程序,则该插件应已包含在您的config.xml文件中。
脚本等待设备准备就绪,然后使用cordova-plugin-inappbrowser plugin打开给定的URL。 '_self'
参数表示它在Phonegap webview中打开页面,'location=no'
表示没有地址栏。有关其他参数选项,请参阅cordova-plugin-inappbrowser插件的文档(上面的链接)。
最后,要在适当的模拟器中测试应用程序(假设您已安装Phonegap CLI),请运行以下命令:
phonegap run ios --verbose --stack-trace
phonegap run android --verbose --stack-trace