【问题标题】:PhoneGapBuild - Local assets are not loaded in webviewPhoneGapBuild - 本地资产未在 webview 中加载
【发布时间】:2015-12-30 20:55:46
【问题描述】:

我正在尝试使用 PhoneGapBuild 网站将我的 AngularJS 移动网站包装为 PhoneGap/Cordova 混合应用程序。我能够成功地为 IOS 和 Android 上传、构建和安装,但是,在任一设备上运行该应用程序时,我只会得到一个空白的白屏。

其他信息:

  • 这是我第一次尝试创建移动应用程序。
  • 我正在使用 build.phonegap.com 将我的移动网站的 html 资产构建为使用 config.xml 文件(上图)的 android 和 ios 混合应用程序。
  • 默认目标是 Android sdk 版本 7 和 iOS。
  • 我正在 Android Charge 和 iPhone 5c 上测试应用程序

如果“window.cordova”存在而它不存在,我已经使用调试器“weinre”来控制台.log。但是,像“window.angular”和“window._”这样的东西确实存在,因为我是从外部 CDN 加载它们的。看起来我的 本地 引用的资产都没有加载(通过其中的 console.logs 确认)。我试过引用“/cordova.js”、“www/cordova.js”、“/www/cordova.js”都无济于事。

是否有我缺少的权限或 XML 配置或其他完全?

明确地说,我在 index.html 文件中引用了cordova:

<script src="cordova.js"></script>

这是我的配置文件:

<?xml version="1.0" encoding="utf-8"?>

<widget id="com.tristatetennis.app" version="0.0.1" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0" xmlns:gap="http://phonegap.com/ns/1.0">
    <name>TriStateTennis</name>
    <description>Tennis</description>
    <content src="index.html" />
    <icon src="icon.png" />
    <access origin="*" />
    <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" />
    <plugin name="cordova-plugin-battery-status" />
    <plugin name="cordova-plugin-camera" />
    <plugin name="cordova-plugin-media-capture" />
    <plugin name="cordova-plugin-console" />
    <plugin name="cordova-plugin-contacts" />
    <plugin name="cordova-plugin-device" />
    <plugin name="cordova-plugin-device-motion" />
    <plugin name="cordova-plugin-device-orientation" />
    <plugin name="cordova-plugin-dialogs" />
    <plugin name="cordova-plugin-file" />
    <plugin name="cordova-plugin-file-transfer" />
    <plugin name="cordova-plugin-geolocation" />
    <plugin name="cordova-plugin-globalization" />
    <plugin name="cordova-plugin-inappbrowser" />
    <plugin name="cordova-plugin-media" />
    <plugin name="cordova-plugin-network-information" />
    <plugin name="cordova-plugin-splashscreen" />
    <plugin name="cordova-plugin-vibration" />
    <!-- <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>

谢谢

【问题讨论】:

  • 请在您的 帖子中回答以下问题。这是您的第一个应用程序吗?您的目标平台及其目标版本是什么?你在使用CLI, SDK or Build 吗?当您将该信息添加到您的帖子中后,请在 cmets 中回复 - 这样我就知道您已经更新了您的帖子。
  • @JesseMonroy650 谢谢你的提问;我已经更新了我的帖子
  • 好的。我已在最有用的地方添加了您的信息。 ——你有多个误解和错误。最大的问题是您无法制作网站包装器。您的应用程序将被 Google 和 Apple 拒绝。您将需要进行完整的重写。你准备好了吗?或者在我回答之前你有什么问题吗?
  • 我都准备好了,但我有一些问题。在这一点上我不担心被拒绝,因为我正在经历这个过程来熟悉必须做的事情 - 我愿意进行改进并深入研究 Cordova API,这样我的网站就不会被包装为一个应用程序。话虽如此,是的,我假设我可以将我的 Web 资产(已作为单页应用程序的代码)包装为 webview 混合应用程序。我很想听听你的 cmets。
  • 优秀。听起来你会做得很好。给我大约20分钟。现在是 8:34 - 在德克萨斯州的埃尔帕索。

标签: cordova webview phonegap-build hybrid-mobile-app


【解决方案1】:

好消息是你的config.xml 看起来不错,比大多数人都好。

  1. 可以肯定的是,我们正在谈论PGB (PhoneGap Build),Phonegap/Adobe 提供的基于云的构建服务。

  2. 您的大多数问题源于偶然发现
    #5 在设计应用程序时,认为 phonegap 的工作方式类似于网站或网络浏览器。 Top Mistakes by Developers new to Cordova/Phonegap

    确保您阅读了所有粗体句子,因为您可能不得不一遍又一遍地阅读。

    关于我之前谈到的部分,您的应用程序不能成为您网站的包装器,这是您需要知道的:

    引用Apple iTunes Guidelines - 2.12

    不是很有用、不独特、只是捆绑为应用程序的网站或不提供任何持久娱乐价值的应用程序可能会被拒绝

  3. 对于Phonegap Build,它的主要资产(index.html、config.xml)必须在根目录中。这意味着两个文件*必须*位于同一目录中。这也意味着子目录可以包含其他与网络相关的资产,例如 javascript、css 和更多网页。

    这个错误来自于偶然发现#1 的Top Mistakes by Developers new to Cordova/Phonegap。如果您使用的是Cordova/Phonegap CLI,那么config.xml 位于index.html 下一个目录,index.html 位于www/ 中。

  4. 在config.xml 中不使用phonegap-version 时,您将获得最新版本,当前为cli-5.2.0。这有很多含义。

    您不能要求低于编译器支持的 android-minSdkVersion。文档说 7 可以,但这是一个错误。支持的最低 Android API 是 14 (Ice Cream Sandwich)。

    这个要求很难实现,因为您必须阅读 *Cordova* 文档。 Android Platform Guide -> 要求和支持。如果要支持 7,则需要使用 Phonegap CLI。

  5. 如果您使用的是 Android 6.0,PGB 尚不支持此功能。如果您使用的是 iOS9,Cordova 最近刚刚在 released 2015 年 12 月 8 日(hot fixes 2015 年 12 月 18 日),PGB 不支持,YET。 这是因为 PGB 仍然使用 Cordova 编译器来完成它的工作。

  6. 您可以使用cordova.js 或phonegap.js。没关系,两者都支持。有关详细信息,请参阅:Documentaion -> 简介 -> Getting Started with Build -> Sections -> 确保您仍然可以访问 PhoneGap API

  7. 确保您使用所有插件的版本。

    Documentaion -> 配置-> Plugins -> Including a plugin in your project

    如果您省略规范(版本)标签,您的应用将始终使用最新版本的插件构建。插件更新后,下次您更新应用代码时会自动更新,这可能会导致意外行为。

此外,这里有一些帮助链接和常见问题解答:

【讨论】:

    【解决方案2】:

    原来我的问题与 AngularJS 与 PhoneGap/Cordova 的集成有关。首先,手头的具体问题是由于我的 HTML 标记中的 base 标记造成的。当 html5 模式设置为 true 时,Angular 需要基本标记。但是,如here 所述,html5 模式不适用于 PhoneGap/Cordova。要解决此问题,您必须执行以下操作:

    1. 从您的 HTML 标记中完全删除 base 标记
    2. 确保所有 URL 引用都是相对(即没有前导“/”)
    3. 设置 $locationProvider.html5Mode(false);
    4. $sceDelegateProvider.resourceUrlWhitelist(['**']); (docs)
    5. $compileProvider.aHrefSanitizationWhitelist(/^\s*(https?|ftp|mailto|file|tel):/); (reference)

    希望这对某人有所帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-06
      • 1970-01-01
      • 2016-10-21
      • 2014-01-21
      • 2020-06-13
      • 1970-01-01
      • 2012-09-05
      • 2019-04-17
      相关资源
      最近更新 更多