PhoneGap"无法加载资源:服务器响应状态为404(未找到)"

时间:2015-09-27 13:26:49

标签: cordova permissions

我有一个我最近尝试转换为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)

2 个答案:

答案 0 :(得分:5)

@Talula, 可能是您没有为您的phonegap编译器设置版本。这是你需要知道的。

来自Top Mistakes by Developers new to Cordova/Phonegap你已经点击了:

  • #6 未设置&#34; phonegap版本&#34;为您的编译器
  • #7 未设置&#34;版本&#34;为你插件
  • #10 不添加新的&#34;白名单&#34;和&#34;白名单插件&#34; config.xml中的参数。

来自 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